springboot的使用方式
第一步 声明验证框架到springboot中
@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上
@Data
public class Param implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 名称
*/
@NotEmpty(message = "名称不能为空")
private String name;
}
@PostMapping("/save")
public Result save(@Validated({FirstGroup.class}) @RequestBody Param param) {
service.save(param);
return Result.success();
}
分组效验
@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();
}
常用valid注解
- @AssertFalse 校验false
- @AssertTrue 校验true
- @DecimalMax(value=,inclusive=) 小于等于value,inclusive=true,是小于等于
- @DecimalMin(value=,inclusive=) 与上类似
- @Max(value=) 小于等于value
- @Min(value=) 大于等于value
- @NotNull 检查Null
- @Past 检查日期
- @Pattern(regex=,flag=) 正则
- @Size(min=, max=) 字符串,集合,map限制大小
- @Valid 对po实体类进行校验
- @NotNull 和 @NotEmpty 和@NotBlank 区别
- @NotEmpty 用在集合类上面
- @NotBlank 用在String上面
- @NotNull 用在基本类型上