c/c++语言开发共享关于BindingResult的使用总结及注意事项

目录bindingresult总结及注意事项相关的校验api空检查长度检查booelan检查日期检查其他验证数值检查项目使用中遇到的问题bindingresult作用原理bindingresult总结

目录
  • bindingresult总结及注意事项
    • 相关的校验api
      • 空检查
      • 长度检查
      • booelan检查
      • 日期检查
    • 其他验证
      • 数值检查
    • 项目使用中遇到的问题
    • bindingresult作用原理

      bindingresult总结及注意事项

      记一个简单又好用的api:bindingresult

      bindingresult使用起来很简单,一般在controller中使用

      作用:用于对前端穿进来的参数进行校验,省去了大量的逻辑判断操作

      相关的校验api

      空检查

      • @notempty:用在集合类上面;不能为null,而且长度必须大于0
      • @notblank:用在string上面;只能作用在string上,不能为null,而且调用trim()后,长度必须大于0
      • @notnull:用在基本类型上;不能为null,但可以为empty。

      长度检查

      • @size(min=,max=):验证对象(array,collection,map,string)长度是否在给定的范围之内 不要错用了异常类型,比如在int上不可用@size
      • @length(min=, max=):只适用于string 类型

      booelan检查

      • @asserttrue:验证 boolean 对象是否为 true
      • @assertfalse:验证 boolean 对象是否为 false

      日期检查

      • @past:验证 date 和 calendar 对象是否在当前时间之前
      • @future:验证 date 和 calendar 对象是否在当前时间之后
      • @pattern:验证 string 对象是否符合正则表达式的规则

      其他验证

      • @vaild 递归验证,用于对象、数组和集合,会对对象的元素、数组的元素进行一一校验
      • @email 用于验证一个字符串是否是一个合法的右键地址,空字符串或null算验证通过
      • @url(protocol=,host=,port=,regexp=,flags=) 用于校验一个字符串是否是合法url

      数值检查

      建议使用在stirng,integer类型,不建议使用在int类型上,因为表单值为”” 时无法转换为int,但可以转换为stirng为””,integer为null

      • @min:验证 number 和 string 对象是否大等于指定的值
      • @max:验证 number 和 string 对象是否小等于指定的值
      • @decimalmax:被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过bigdecimal定义的最大值的字符串表示.小数存在精度
      • @decimalmin:被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过bigdecimal定义的最小值的字符串表示.小数存在精度
      • @digits:验证 number 和 string 的构成是否合法
      • @digits(integer=,fraction=):验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。

      项目使用中遇到的问题

      一开始传入的参数没有使用@validated 修饰,结果绑定不起作用,参数校验不成功,加上此注解即可生效。

      所以bingdingresult是要与@validated同时使用的。

      项目中具体使用如下:

      controller中:

        @apioperation("添加角色")  @requestmapping(value = "/create", method = requestmethod.post)  @responsebody  public commonresult create(@validated @requestbody umsrole role, bindingresult bindingresult ) {      int count = roleservice.create(role);      if (count > 0) {          return commonresult.success(count);      }      return commonresult.failed();  }

      domain中:

        import io.swagger.annotations.apimodelproperty;  import javax.validation.constraints.notempty;  import java.io.serializable;  import java.util.date;  @data  public class umsrole implements serializable {      private long id;      @apimodelproperty(value = "名称")      @notempty(message = "name不能为空!")      private string name;      @apimodelproperty(value = "描述")      @notempty(message = "描述不能为空!")      private string description;      @apimodelproperty(value = "后台用户数量")      private integer admincount;      @apimodelproperty(value = "创建时间")      private date createtime;      @apimodelproperty(value = "启用状态:0->禁用;1->启用")      private integer status;      private integer sort;      private static final long serialversionuid = 1l;  

      调用接口返回效果:

      参数:

      {
      “name”:“test”
      }

      返回值:

      {
      “code”: 404,
      “message”: “描述不能为空!”,
      “data”: null
      }

      注意!

      1.@validated 与bindingresult 需要相邻,否则 变量result 不能接受错误信息

      控制台输出

      field error in object ‘entity’ on field ‘变量’: rejected value [null]; codes [notnull.entity.变量,notnull.变量,notnull.java.lang.string,notnull]; arguments [org.springframework.context.support.defaultmessagesourceresolvable: codes

      2.如果使用了@validated,那么beanvalidate也会抛出异常而不是之前的封装在bindingresult中

      总结:

      使用bindingresult,省去了代码块中的大部分校验

      bindingresult作用原理

      controller代码

        @requestmapping("")      public string index(@valid user user , bindingresult bindingresult){          if (bindingresult.haserrors()){              list<objecterror> allerrors = bindingresult.getallerrors();              objecterror objecterror = allerrors.get(0);              system.out.println(objecterror.getdefaultmessage());              system.out.println(objecterror.getobjectname());              system.out.println(allerrors);          }          return "index";      }

      请求先来到dispatcherservlet的dodispatch 方法,最终会调用modelattributemethodprocessor#resolveargument方法

      关于BindingResult的使用总结及注意事项

      调用databinder#validate方法后调用constrainttree#validatesingleconstraint,由它来调用具体的验证器

      关于BindingResult的使用总结及注意事项

      具体的验证器

      关于BindingResult的使用总结及注意事项

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

      需要了解更多c/c++开发分享关于BindingResult的使用总结及注意事项,都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/965231.html

      (0)
      上一篇 2021年12月2日
      下一篇 2021年12月2日

      精彩推荐