美文网首页
valid参数验证框架使用

valid参数验证框架使用

作者: 零星恋雪 | 来源:发表于2019-08-22 16:23 被阅读0次

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上
  • 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();
    }

常用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 用在基本类型上

相关文章

网友评论

      本文标题:valid参数验证框架使用

      本文链接:https://www.haomeiwen.com/subject/blmnsctx.html