JSR303
新版springboot 需要maven引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
1.给bean添加校验注解
注解都在javax.validation.constraints ,并定义自己的message提示
@NotBlank(message ="最后修改时间不能为空!")
private DatelastModifyDate;
中文提示在ValidationMessages_zh_cn.properties
2.@Valid 启动校验
3.给校验的bean后紧跟一个BindingResult,就可以获取到校验的结果
public R save(@Valid @RequestBody GameEntity game, BindingResult result){
if(result.hasErrors()){
Map map =new HashMap<>();
//获取校验的错误结果
result.getFieldErrors().forEach((item)->{
//FieldError 获取到错误提示
String message = item.getDefaultMessage();
//获取到错误的属性名字
String field = item.getField();
map.put(field,message);
});
return R.error(400,"提交的数据不合法!").put("data",map);
}else{
}
gameService.save(game);
return R.ok();
}
正则表达式
/**
* 检索首字母
*/
@NotEmpty
@Pattern(regexp ="/^[a-zA-Z]$/", message ="检索首字母必须是一个字母")
private Stringdescript;
/**
* 排序
*/
@NotNull
@Min(value =0,message ="排序必须大于等于0")
private Integersort;
4.统一的异常处理
@Slf4j
@RestControllerAdvice(basePackages ="com.terry.gamehall.gms.controller")
public class ExceptionControllerAdvice {
@ExceptionHandler(value= MethodArgumentNotValidException.class)
public R handleVaildException(MethodArgumentNotValidException e){
Map map =new HashMap<>();
BindingResult result = e.getBindingResult();
//获取校验的错误结果
result.getFieldErrors().forEach((item)->{
//FieldError 获取到错误提示
String message = item.getDefaultMessage();
//获取到错误的属性名字
String field = item.getField();
map.put(field,message);
});
return R.error(400,"提交的数据不合法!").put("data",map);
}
}
5.分组校验groups,AddGroup是一个接口
6.自定义校验注解(写在了工程里面)
1.编写一个自定义的校验注解
2.编写一个自定义的校验器
3.关联自定义的校验器和自定义的校验注解
4.可以使用多个校验器试用不同的校验类型