JSR303校验
JSR303数据校验
导入依赖
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
在字段上使用校验规则
@NotBlank
private String name;
对前端的数据校验,在方法参数加上注解
@PostMapping("/add")
public Result addBrand(@Valid @RequestBody Brand brand){
return null;
}
自定义返回结果
自定义返回的校验失败信息
@NotBlank(message = "品牌名不能为空")
private String name;
自定义返回结果
@PostMapping("/save")
public Result addBrand(@Valid @RequestBody Brand brand,
BindingResult result //校验结果
){
if (result.hasErrors()){
Map<String,String> map =new HashMap<>();
result.getFieldErrors().forEach((error)->{
String defaultMessage = error.getDefaultMessage();
String field = error.getField();
map.put(field,defaultMessage);
});
return new Result(400,"error",map);
}else{
}
System.out.println(brand);
return null;
}
分组校验
1.对bean需要校验的字段分组
@NotBlank(message = "品牌名不能为空",groups = {AddGroup.class, UpdateGroup.class})
private String name;
2.在controller方法中@Validated注解中指定校验的分组(必须使用@Validated注解),此时只会对groups中包含该分组的注解的字段校验
@PostMapping("/save")
public R addBrand(@Validated(value = {AddGroup.class}) @RequestBody Brand brand){
brandService.save(brand);
return R.ok("添加成功");
}
需要注意的是如果字段没有指定分组,而controller方法中指定了分组,此时并不会对该字段进行校验