引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
<scope>provided</scope>
</dependency>
待校验实体类User
更多参数校验注解百度,只做示例
@Setter
@Getter
@NoArgsConstructor
public class User {
// @Size 注解表示一个字符串的长度或者一个集合的大小,必须在某一个范围中
@Size(min = 5, max = 10, message = "用户名长度介于5-10个字符之间")
private String name;
// @NotEmpty 注解表示该字段不能为空
@NotEmpty(message = "用户地址不为空")
private String address;
// @DecimalMin 注解表示对应属性值的下限
@DecimalMin(value = "1", message = "年龄输入最小为1岁")
// @DecimalMax 注解表示对应属性值的上限
@DecimalMax(value = "200", message = "年龄输入最大为200")
private Integer age;
// @Email 注解表示对应属性格式是一个 Email
@Email(message = "邮箱格式输入不正确")
// @NotNull 注解表示该字段不能为null
@NotNull(message = "邮箱不能为空")
private String email;
}
Controller
- 实体上添加@Valid注解
- 实体上添加@RequestBody注解(不添加这个报BindException异常而且校验结果有问题,添加之后报正确异常MethodArgumentNotValidException)
@RestController
public class TestController {
@PostMapping("/user")
public String addUser(@Valid @RequestBody User user) {
return "success";
}
}
异常处理
可以自定义异常返回格式
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* 参数校验全局异常处理
* @param e
* @return
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public Map<String,Object> MethodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) {
Map<String,Object> map=new HashMap<>();
List<String> errors=new ArrayList<>();
if (!e.getBindingResult().getAllErrors().isEmpty()){
//循环获取异常信息
for (ObjectError error:e.getBindingResult().getAllErrors()){
errors.add(error.getDefaultMessage());
}
}
map.put("code","1");
map.put("msg",errors);
return map;
}
}
使用postman测试
输入:
输入
返回结果:400 Bad Request
返回结果
具体返回错误信息:
返回信息