目录

SpringBoot 参数校验

验证注解

@NotNull,@NotEmpty,@NotBlank 三者的区别

注意:

  1. @NotBlank 只能用来注解String
  2. @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

总结:

  1. @NotNull要求字段必传,且不能为 null
  2. @NotEmpty要求字段必传,且不能为 null
  3. @NotBlank仅可修饰字符串,除了要求必传非 null,且要求字符串除了不可见字符,必须是有可见字符的

普通验证

分组验证

常见坑

参数上的校验注解只能校验 JavaBean

1
2
3
4
5
@Data
public class User {
    @NotNull(message = "用户id不能为空")
    private Integer id;
}
  1. 仅使用@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)
}

上述校验方法根本不起作用,也就是校验不生效。

  1. 控制器类加@Validated注解,控制器方法形参加@Validated也无法完成验证
1
2
3
4
@Validated
public class UserController {
    public String addUser(@Validated @RequestBody List<User> userList)
}

那这里就有疑问了,不能使用@Validated,分组验证也不能用了吗?

  1. 控制器类使用@Validated注解,控制器方法形参使用@Valid注解,方可验证集合
1
2
3
4
@Validated
public class UserController {
    public String addUser(@Valid @RequestBody List<User> userList)
}

参考