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处理校验结果,且实体类作为查询参数时,避免被其他方法使用,不然的地方需要限制,有的没有,不需要限制的方法会报错。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端