@Configuration
@EnableAutoConfiguration
public class ValidatorConfig {
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor(){
return new MethodValidationPostProcessor();
}
}
第二步 controller 类头上设置@Validated 【重要】
@RestController
@Validated
@RequestMapping("demo")
public class DemoController {
}
第三步 统一异常处理
@ExceptionHandler({ MethodArgumentNotValidException.class })
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public Result requestMissingServletRequest(MethodArgumentNotValidException ex) {
BindingResult bindingResult = ex.getBindingResult();
List<String> ls = new ArrayList<>();
if(bindingResult.hasErrors()){
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
// 遍历不合法字段
fieldErrors.forEach(
fieldError -> {
ls.add(fieldError.getDefaultMessage());
// 获取不合法的字段名和不合法原因
log.info("error field is : {} ,message is : {}", fieldError.getField(), fieldError.getDefaultMessage());
}
);
}
return Result.commError(ls.toString());
}
第四步 使用
注解在单个参数上
@PostMapping("/save")
public void save (@Valid @NotEmpty(message = "param不能为空")
@RequestParam("param")String param){
//todo...
}
注解在bean上
bean
@Data
public class Param implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 名称
*/
@NotEmpty(message = "名称不能为空")
private String name;
}
使用bean效验
@PostMapping("/save")
public Result save(@Validated({FirstGroup.class}) @RequestBody Param param) {
service.save(param);
return Result.success();
}
分组效验
效验bean
@Data
public class Param implements Serializable{
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 名称
*/
@NotEmpty(message = "名称不能为空", groups = { FirstGroup.class, SecondGroup.class})
private String name;
}
分组
public interface FirstGroup {
}
public interface SecondGroup {
}
验证使用
@PostMapping("/save")
public Result save(@Validated({FirstGroup.class}) @RequestBody Param param) {
service.save(param);
return Result.success();
}