单个参数
验证失败,抛出ConstraintViolationException
异常
```java @Validated @RestController public class BookController {
@RequestMapping(value = "/book/info", method = RequestMethod.GET)
public Object getBookInfo(@NotBlank(message = "书籍ID不能为空") String bookId) {
return "SUCCESS";
}
} ```
javaBean (json)
验证失败,抛出 MethodArgumentNotValidException
异常
```java @RequestMapping(value = "/save/user") public Object saveUser(@Valid @RequestBody User user) {
return "SUCCESS";
} ```
javaBean (form-data)
验证失败,抛出BindException
异常
```java public class User { @NotBlank(message = "用户名不能为空") private String username;
@NotNull(message = "年龄不能为空")
@Min(value = 1, message = "年龄最小为1")
@Max(value = 200, message = "年龄最大为200")
private Integer age;
} ```
java @RequestMapping(value = "/save/user") public Object saveUser(@Valid User user) { return "SUCCESS"; }
分组校验
需求:保存用户时,id可以为空;更新用户时,id不能为空
定义两个接口
```java public interface Save { }
public interface Update { } ```
定义需要校验的对象
```java public class User implements Serializable{ // 约束注解上声明分组信息groups
@NotNull(groups = {Update.class}) private Long id; @NotBlank(groups = {Update.class,Save.class,}) private String name; @NotBlank(groups = {Update.class,Save.class}) private String college;
} ```
@Validated
注解上指定校验分组```java @RequestMapping("/saveUser") // 校验通过,才会执行业务逻辑处理 public String save(@Validated(Save.class) User user){
return "保存时不校验"; }@RequestMapping("/updateUser") public String update(@Validated(Update.class) User user){ return "更新时校验"; } ```
自定义校验
需求:自定义手机号校验
定义约束注解
```java @Target({METHOD, FIELD,PARAMETER}) @Retention(RUNTIME) @Documented @Constraint(validatedBy = {PhoneNumberValidator.class}) public @interface PhoneNumber {
// 默认错误消息 String message() default "手机号不合法"; // 分组 Class<?>[] groups() default {}; // 负载 Class<? extends Payload>[] payload() default {};
} ```
实现
ConstraintValidator
接口编写校验规则```java public class PhoneNumberValidator implements ConstraintValidator { // String:要校验的对象类型 private static final Pattern PATTERN = Pattern.compile("^((13[0-9])|(15[^4,\D])|(18[0,5-9]))\d{8}$");
@Override public boolean isValid(String value, ConstraintValidatorContext context) { if (value != null) { Matcher matcher = PATTERN.matcher(value); return matcher.find(); } return true; }
} ```
测试
java @RequestMapping("/validted") public String validted(@Validated @PhoneNumber String number){ // 校验通过,才会执行业务逻辑处理 return "手机号合法"; }
注解大全:https://www.jianshu.com/p/dd442dfc5509