@Configuration
@EnableAutoConfiguration
public class ValidatorConfig {
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor(){
return new MethodValidationPostProcessor();
}
}
第二步 controller 類頭上設(shè)置@Validated 【重要】
@RestController
@Validated
@RequestMapping("demo")
public class DemoController {
}
第三步 統(tǒng)一異常處理
@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());
}
第四步 使用
注解在單個參數(shù)上
@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();
}