依赖

<!--数据验证-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

参数验证

直接在实体类中定义

@Data
public class User {

    @Pattern(regexp = "^[A-Za-z0-9]{4,9}$", message = "用户名格式错误")
    private String name;

    @Min(18)
    @Max(100) //限制年龄大小
    @NotNull
    private Integer age;

    @NotBlank(message = "该字段不能为空或仅包含空格")
    @Size(min = 6, max = 20, message = "密码长度必须大于6小于20")
    private String password;
}
  • @NotNull: 该字段不能为 null。
  • @NotBlank: 该字段不能为空或仅包含空格(通常用于 String 类型)。
  • @Size(min, max): 字符串的长度必须在指定的范围内。
  • @Min(value): 数字类型的最小值。
  • @Max(value): 数字类型的最大值。
  • @Email: 验证该字段是否符合电子邮件格式。
  • @Pattern(regexp): 使用正则表达式验证字段。
  • @Past: 验证日期字段是否在当前日期之前。
  • @Future: 验证日期字段是否在当前日期之后。

POST数据验证

@PostMapping("/v")
public R get(@RequestBody @Valid User  user){
    return  R.success("成功",user);
}

POST统一异常处理

@ControllerAdvice
    public class GlobalExceptionHandler {
        //处理POST验证异常
        @ExceptionHandler(MethodArgumentNotValidException.class)
        @ResponseBody
        @ResponseStatus(HttpStatus.BAD_REQUEST) // 设置返回的状态码为 400
        public R MethodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) {
            FieldError fieldError = (FieldError) e.getAllErrors().get(0);
            String fieldName = fieldError.getField();
            String errorMessage = fieldError.getDefaultMessage();
            return R.error(400,fieldName+errorMessage,null);
        }
    }

GET数据验证

@RestController
@Validated  // 启用方法级验证
@RequiredArgsConstructor
public class TestController
{
    @GetMapping("/v")
    public R get( @RequestParam(required = true) 
    @Min(value = 1, message = "非法的值") Long id){
        return  R.success("成功",id);
    }
}

GET统一异常处理

@ExceptionHandler(ConstraintViolationException.class)
@ResponseBody
@ResponseStatus(HttpStatus.BAD_REQUEST) // 设置返回的状态码为 400
public R handleConstraintViolationException(ConstraintViolationException ex) {
    return R.error(400,ex.getMessage(),null);
}

统一返回格式

@Data
public class R {

    public R(int code,String meg,Object data)
    {
        this.code=code;
        this.meg=meg;
        this.data=data;
    }

    private  int code;
    private  String meg;
    private Object data;

    public static R success(String meg,Object data)
    {
        return  new R(200,meg,data);
    }

    public static R error(int code,String meg,Object data)
    {
        return  new R(code,meg,data);
    }
}

在这里插入图片描述

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐