1、封装实体类
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.*;
import java.util.Date;
@Getter
@Setter
@ToString
public class User {
@NotNull(message = "字段值不能为空")
@NotBlank(message = "这个姓名不能为空")
private String name;
@Max(value = 20,message = "最大长度为20")
@Min(value = 10,message = "最小长度为10")
private Integer age;
@Size(max=10,min=5,message = "字段长度要在5-10之间")
@Pattern(regexp = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z0-9]{2,6}$",message = "不满足邮箱正则表达式")
private String email;
@AssertTrue(message = "字段为true才能通过")
private boolean isSave;
@Future(message = "时间在当前时间之后才可以通过")
private Date date;
}
2、在需要进行参数校验的controller实体类参数前贴上 @Valid 注解
@PostMapping(value = "/test",produces = "application/json;charset=UTF-8")
public User vali(@RequestBody @Valid User user){
return user;
}
3、自定义全局异常处理器 ExceptionHandlerContrller
/**
* 全局异常处理
*/
@ControllerAdvice
public class ExceptionHandlerContrller {
/**
* 当使用了 @Validated + @RequestBody 注解但是没有在绑定的数据对象后面跟上 Errors 类型的参数声明的话,
* Spring MVC 框架会抛出 MethodArgumentNotValidException 异常。
* 当抛出 MethodArgumentNotValidException 异常,就会被相应的异常处理捕捉到理(有点类似于aop的意思)
* @param e
* @return
*/
@ExceptionHandler(MethodArgumentNotValidException.class) //指定异常类型
@ResponseBody
public List<ErrorMsg> exception(MethodArgumentNotValidException e) {
BindingResult bindingResult = e.getBindingResult();
List<ObjectError> allErrors = bindingResult.getAllErrors();
List<ErrorMsg> errorMsgs = new ArrayList<>();
allErrors.forEach(objectError -> {
ErrorMsg errorMsg = new ErrorMsg();
FieldError fieldError = (FieldError)objectError;
errorMsg.setField(fieldError.getField());
errorMsg.setObjectName(fieldError.getObjectName());
errorMsg.setMessage(fieldError.getDefaultMessage());
errorMsgs.add(errorMsg);
});
return errorMsgs;
}
}
4、当我们访问接口,结果如下
[
{
"field": "email",
"objectName": "user",
"message": "不满足邮箱正则表达式"
},
{
"field": "isSave",
"objectName": "user",
"message": "字段为true才能通过"
},
{
"field": "age",
"objectName": "user",
"message": "最大长度为20"
},
{
"field": "name",
"objectName": "user",
"message": "这个姓名不能为空"
}
]