BindingResult的使用

BindingResult用在实体类校验信息返回结果绑定。

 

实体类常用的校验注解有:

  • @Null 被注释的元素必须为null
  • @NotNull 被注释的元素不能为null
  • @AssertTrue 该字段只能为true
  • @AssertFalse 该字段的值只能为false
  • @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
  • @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
  • @DecimalMin("value") 被注释的元素必须是一个数字,验证小数的最小值
  • @DecimalMax("value") 被注释的元素必须是一个数字,验证小数的最大值
  • @Size(max,min) 查该字段的size是否在min和max之间,可以是字符串、数组、集合、Map等
  • @Digits(integer,fraction) 检查是否是一种数字的整数、分数,小数位数的数字
  • @Past 被注释的元素必须是一个过去的日期
  • @Future 被注释的元素必须是一个将来的日期
  • @Pattern(regexp = "[abc]") 被注释的元素必须符合指定的正则表达式。
  • @Email 被注释的元素必须是电子邮件地址
  • @Length(max=5,min=1,message="长度在1~5") 检查所属的字段的长度是否在min和max之间,只能用于字符串
  • @NotEmpty 被注释的字符串必须非空
  • @Range 被注释的元素必须在合适的范围内
  • @CreditCardNumber 对信用卡号进行一个大致的验证
  • @NotBlank 不能为空,检查时会将空格忽略
  • @NotEmpty 不能为空,这里的空是指空字符串

以上注解在使用时,都可以设置自定义message提示信息。

举个栗子:

 

 1 @ApiModel(value ="TestEntity")
 2 public class TestEntity implements Serializable{
 3  
 4     private static final long serialVersionUID = 1L;
 5     
 6     @ApiModelProperty(value = "唯一id")
 7     private Long id;
 8     
 9     @Size(max=10,message="最大长度为10")
10     @ApiModelProperty(value = "名称")
11     private String name;
12     
13     @NotNull(message="参数不能为空")
14     @ApiModelProperty(value = "年龄")
15     private Integer age;
16  
17     //getter setter...
18     
19 }

Controller层:

 1 public class TestController {
 2  
 3     @PostMapping("/a")
 4     @ApiOperation(value = "测试", notes = "")
 5     public void test(@RequestBody @Valid TestEntity test,BindingResult bindingResult) {
 6         System.out.println(test.toString());
 7         if (bindingResult.hasErrors()) {
 8             throw new 自定义Exception("错误提示码",bindingResult.getFieldError().getDefaultMessage());
 9         }
10     }
11 }

 

@Valid和BindingResult配套使用,@Valid用在参数前,BindingResult作为校验结果绑定返回。

bindingResult.hasErrors()判断是否校验通过,校验未通过,bindingResult.getFieldError().getDefaultMessage()获取在TestEntity的属性设置的自定义message,如果没有设置,则返回默认值"javax.validation.constraints.XXX.message"。

 

注意:在实体类使用校验注解时,controller一定要使用bindingResult处理校验结果,且实体类作为查询参数时,避免被其他方法使用,不然的地方需要限制,有的没有,不需要限制的方法会报错。

posted @ 2022-04-11 17:58  r1-12king  阅读(616)  评论(0编辑  收藏  举报