验证注解
@NotNull,@NotEmpty,@NotBlank 三者的区别
注意:
- @NotBlank 只能用来注解
String
- @NotEmpty 只能注解
字符串
和集合
和数组
|
@NotNull |
@NotEmpty |
@NotBlank |
String name = null; |
false |
false |
false |
String name = “”; |
true |
false |
false |
String name = " “; |
true |
true |
false |
String name = “a”; |
true |
true |
true |
总结:
@NotNull
要求字段必传,且不能为 null
@NotEmpty
要求字段必传,且不能为 null
@NotBlank
仅可修饰字符串,除了要求必传非 null,且要求字符串除了不可见字符,必须是有可见字符的
普通验证
分组验证
常见坑
参数上的校验注解只能校验 JavaBean
1
2
3
4
5
|
@Data
public class User {
@NotNull(message = "用户id不能为空")
private Integer id;
}
|
- 仅使用
@Valid
和@Validated
只能校验 JavaBean,无法校验List<JavaBean>
1
2
3
|
public class UserController {
public String addUser(@Valid @RequestBody List<User> userList)
}
|
1
2
3
|
public class UserController {
public String addUser(@Validated @RequestBody List<User> userList)
}
|
上述校验方法根本不起作用,也就是校验不生效。
- 控制器类加
@Validated
注解,控制器方法形参加@Validated
也无法完成验证
1
2
3
4
|
@Validated
public class UserController {
public String addUser(@Validated @RequestBody List<User> userList)
}
|
那这里就有疑问了,不能使用@Validated
,分组验证也不能用了吗?
- 控制器类使用
@Validated
注解,控制器方法形参使用@Valid
注解,方可验证集合
1
2
3
4
|
@Validated
public class UserController {
public String addUser(@Valid @RequestBody List<User> userList)
}
|
参考