1.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
springboot 集成的 web模块依赖默认集成了validation的包。
2.实体类上加入对应注解以及 错误描述,常用注解如下
注解 | 描述 |
---|---|
@AssertFalse | 被注释的元素必须为 false |
| 同@AssertFalse |
| 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
| 同
|
| 被注释的元素是数字 |
| 将来的日期 |
@Max | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@Min | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@NotNull | 不能是Null |
@Null | 元素是Null |
@Past | 被注释的元素必须是一个过去的日期 |
@Pattern | 被注释的元素必须符合指定的正则表达式 |
@Szie | 被注释的元素 |
常用字符串校验注解
@Email | 元素必须是格式良好的电子邮箱地址 |
@Length | 字符串的大小必须在指定的范围内,有min和max参数 |
@NotEmpty | 字符串的不能是空 |
@NotBlank | 字符串不能使空,但是与@NotEmpty不同的是尾随的空白被忽略 |
@URL | 字符串必须是一个URL |
3.实体类参考
@Data
@ToString
public class Item {
@NotNull(message = "id不能为空")
@Min(value = 1, message = "id必须为正整数")
private Long id;
// 用于强校验集合内部对象的属性,若无此注解,则不校验集合内部对象属性
@Valid
@NotNull(message = "props不能为空")
@Size(min = 1, message = "至少要有一个属性")
private List<Prop> props;
}
@Data
public class Prop {
@NotNull(message = "pid不能为空")
@Min(value = 1, message = "pid必须为正整数")
private Long pid;
@NotNull(message = "vid不能为空")
@Min(value = 1, message = "vid必须为正整数")
private Long vid;
@NotBlank(message = "pidName不能为空")
private String pidName;
@NotBlank(message = "vidName不能为空")
private String vidName;
}
4.控制层加入一个注解即可
@RestController
@RequestMapping("/test")
public class TestController {
@RequestMapping("/test1")
public Object test1(@RequestBody @Valid Item item){
return "success";
}
}
5.增加全局异常处理 捕获 这个异常即可 MethodArgumentNotValidException ,demo写的比较简单,可以用code、message区分,将错误信息写到messae并返回给前台。
@ExceptionHandler({MethodArgumentNotValidException.class})
public String handleException(MethodArgumentNotValidException e) {
return e.getBindingResult().getAllErrors().get(0).getDefaultMessage();
}
6.测试如下
正常case
异常case: