JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,Hibernate Validator 是 Bean Validation 的参考实现。
1、给需要验证的Bean加上校验注解。(package javax.validation.constraints)
2、在Controller的参数位置标上校验注解:@Valid
检验默认不启用,只有加了校验注解才有效,校验错误后会有默认的响应。
校验Bean紧跟一个BindingResult就可以获得错误。
@RequestMappin("save")
public R save (@Valid @RequestBody Entiy entiy, BindingResult result){
if(result.hasErrors()){
Map<String,String> map = new HasMap<>();
result.getFieldError().forEach((item)->{
//FieldError 获取到错误提示
String message = item.getDefaultMessage();
String field = item.getField();
map.put(field,message);
}
return R.error(400,"提交的数据不合法").put("data",map);
}
else{
service.save(entiy);
return R.ok();
}
}
3、统一的异常处理,使用SpringMVC带的CControllerAdvice
@Slf4j
//RestConttrollerAdvice是ResponseBody和ControllerAdvice的结合
@RestConttrollerAdvice(basePackages="com.proc.controller")//指定接收异常的controller路径
public class MyExceptionControllerAdvice{
@ExceptionHandler(value=Exception.class)//指定处理的异常类型
public R handleVaildException(Exception e){
log.error("{},{}",e.getMessage(),e.getClass());
return R.error();
}
}