一、什么是参数校验
例如在某个登录请求中传递参数包含用户信息,需要判断用户信息是否为空,以及判断邮箱是否为空等情况,正常处理会写大量的If else 语句非常影响美观,可读性也非常低,因此提出了参数校验这个概念,也就是下文介绍的@Valid和@Validated注解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @Controller @RequestMapping ( "/user" ) public class UserControlelr { @PostMapping ( "/login" ) public String login(UserDTO userDTO){ if (userDTO.getUsername() == null || userDTO.getUsername().isEmpty()){ // 进行某种操作 } if (userDTO.getEmail() == null || userDTO.getEmail().isEmpty()){ // 进行某种操作 } return "loginSuccess" ; } } |
二、@Valid和@Validated注解的异同
标注位置
- @Validated : 用在类、方法和方法参数上,但不能用于成员属性。
- @Valid:可以用在方法、构造函数、方法参数和成员属性上。
分组校验
- @Validated :支持分组验证,可以更细致地控制验证过程。
- @Valid:主要支持标准的Bean验证功能,不支持分组验证。
嵌套校验
- @Validated :不支持嵌套验证。
- @Valid:支持嵌套验证,可以嵌套验证对象内部的属性。
三、常用校验注解
注解 | 校验作用 |
---|---|
@NotBlank | 用在String 上面,一般用来校验String类型不能为空,而且调用trim()后,长度必须大于0。 |
@NotEmpty | 用在集合上面,一般用来校验List类型(不能注释枚举),而且长度必须大于0 |
@NotNull | 验证字段不为 null。一般用于数字类型。 |
@Min(value) | 限制必须为一个不小于指定值的数字 |
@Max(value) | 限制必须为一个不大于指定值的数字 |
@past | 限制元素(日期类型)必须是一个过去的日期 |
@Future | 限制元素(日期类型)必须是一个将来的日期 |
限制的元素值为是电子邮件地址 | |
@Patern(value) | 限制必须符合指定的正则表达式 |
四、如何使用
1、普通参数校验
即直接检验像String、Interger这些普通参数
注意,要在controller上加入@Validated注解才能生效
1 2 3 4 5 6 7 8 | @RestController @Validated public class Test1Controller { @PostMapping ( "/test1" ) public String test1( @NotEmpty String username, @Max ( 5 ) Integer value){ return "校验普通参数" ; } |
在Apifox上测试,会显示错误信息
2、对象参数校验
UserDTO.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | @Data public class UserDTO { /** * 用户名 */ @NotBlank private String username; /** * 密码 */ @NotBlank private String pasword; /** * 邮箱 */ @Email private String email; } |
在参数的DTO上加入@Valid和@Validated效果是一样的
1 2 3 4 5 6 7 | @RestController public class Test2Controller { @PostMapping ( "/test2" ) public String test2( @Valid @RequestBody UserDTO userDTO){ return "对象参数验证" ; } } |
在Apifox上测试,会显示错误信息
3、集合参数校验
注意,要在controller上加入@Validated注解才能生效
1 2 3 4 5 6 7 8 | @RestController @Validated public class Test3Controller { @PostMapping ( "/test3" ) public String test3( @Valid @RequestBody List userDTOList){ return "集合参数校验" ; } } |
在Apifox上测试,会显示具体第几个变量的哪几个参数有错误
4、嵌套校验
UserListDTO.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @Data public class UserListDTO { /** * List的name */ @NotBlank private String listName; /** * User列表 */ @Valid private List userDTOList; } |
1 2 3 4 5 6 7 | @RestController public class Test4Controller { @PostMapping ( "/test4" ) public String test4( @Validated @RequestBody UserListDTO userListDTO){ return "嵌套参数校验" ; } } |
在Apifox上测试,会显示具体第几个变量的哪几个参数有错误
以上就是SpringBoot中利用@Valid和@Validated进行参数校验的详细内容,更多关于SpringBoot @Valid和@Validated参数校验的资料请关注IT俱乐部其它相关文章!