• 【SpringBoot】SpringBoot集成hibernatevalidator


    为什么用hibernate-validator

    原先项目中,对前端传入的参数进行校验代码非常多,而且重复的代码很多,在多人开发环境中,很多人返回的值也是五花八门,没有固定格式。

    引入hibernate-validator后,能通过注解方式解决校验代码过多和重复的问题,返回格式由他统一负责,内容可以自由编辑。

    怎么用

    1. POM引入包,在springboot中,已经集成了这个工具,所以只要声明一下即可

              <dependency>
                  <groupId>org.hibernate.validator</groupId>
                  <artifactId>hibernate-validator</artifactId>
              </dependency>
      
    2. 在RequestVo中,加上需要的注解

      @Data
      @ToString
      public class ValidationTestVo implements Serializable {
          @NotNull(message ="【用户ID】不能为空" )
          @Size(min = 1,max = 5,message = "用户ID长度必须在1-5之间")
          private String userId;
      
          @Range(min = 0,max = 200,message = "年龄需要在0-200中间")
          @NotNull(message = "【年龄】不能为空")
          private int age;
      
          @Pattern(regexp = "^([\\u4e00-\\u9fa5]{1,20}|[a-zA-Z\\.\\s]{1,20})$",message = "名字只能输入中文、英文,且在20个字符以内")
          @NotEmpty(message = "【姓名】不能为空")
          private String userName;
          @Email(message = "【邮箱】格式不规范")
          private String email;
          @Past
          private Date birthday;
      
      }
      
    3. 在controller中,参数前面,加上@Validated 注解,否则不生效。

      @RestController
      @RequestMapping(value ="/hibernate")
      public class HibernateValidatorController {
          @PostMapping(value ="/test1")
          @ResponseBody
          public ValidationTestVo testValidation(@Validated @RequestBody ValidationTestVo validationTestVo){
              return validationTestVo;
          }
      }
      
    4. 请求触发

      {
          "userId":"122221",
          "age":1111,
          "userName":"sad32.m,.laa",
          "email":"12112",
          "birthday":1391141532000
      }
      

      由于没有做统一异常处理,所以当前返回的是这样的。

      {
          "timestamp": "2021-12-20T07:33:10.458+00:00",
          "status": 400,
          "error": "Bad Request",
          "trace": "",
          "message": "Validation failed for object='validationTestVo'. Error count: 4",
          "errors": [
              {
                  "codes": [
                      "Pattern.validationTestVo.userName",
                      "Pattern.userName",
                      "Pattern.java.lang.String",
                      "Pattern"
                  ],
                  "arguments": [
                      {
                          "codes": [
                              "validationTestVo.userName",
                              "userName"
                          ],
                          "arguments": null,
                          "defaultMessage": "userName",
                          "code": "userName"
                      },
                      [],
                      {
                          "arguments": null,
                          "defaultMessage": "^([\\u4e00-\\u9fa5]{1,20}|[a-zA-Z\\.\\s]{1,20})$",
                          "codes": [
                              "^([\\u4e00-\\u9fa5]{1,20}|[a-zA-Z\\.\\s]{1,20})$"
                          ]
                      }
                  ],
                  "defaultMessage": "名字只能输入中文、英文,且在20个字符以内",
                  "objectName": "validationTestVo",
                  "field": "userName",
                  "rejectedValue": "sad32.m,.laa",
                  "bindingFailure": false,
                  "code": "Pattern"
              },
              {
                  "codes": [
                      "Size.validationTestVo.userId",
                      "Size.userId",
                      "Size.java.lang.String",
                      "Size"
                  ],
                  "arguments": [
                      {
                          "codes": [
                              "validationTestVo.userId",
                              "userId"
                          ],
                          "arguments": null,
                          "defaultMessage": "userId",
                          "code": "userId"
                      },
                      5,
                      1
                  ],
                  "defaultMessage": "用户ID长度必须在1-5之间",
                  "objectName": "validationTestVo",
                  "field": "userId",
                  "rejectedValue": "122221",
                  "bindingFailure": false,
                  "code": "Size"
              },
              {
                  "codes": [
                      "Range.validationTestVo.age",
                      "Range.age",
                      "Range.int",
                      "Range"
                  ],
                  "arguments": [
                      {
                          "codes": [
                              "validationTestVo.age",
                              "age"
                          ],
                          "arguments": null,
                          "defaultMessage": "age",
                          "code": "age"
                      },
                      200,
                      0
                  ],
                  "defaultMessage": "年龄需要在0-200中间",
                  "objectName": "validationTestVo",
                  "field": "age",
                  "rejectedValue": 1111,
                  "bindingFailure": false,
                  "code": "Range"
              },
              {
                  "codes": [
                      "Email.validationTestVo.email",
                      "Email.email",
                      "Email.java.lang.String",
                      "Email"
                  ],
                  "arguments": [
                      {
                          "codes": [
                              "validationTestVo.email",
                              "email"
                          ],
                          "arguments": null,
                          "defaultMessage": "email",
                          "code": "email"
                      },
                      [],
                      {
                          "arguments": null,
                          "defaultMessage": ".*",
                          "codes": [
                              ".*"
                          ]
                      }
                  ],
                  "defaultMessage": "【邮箱】格式不规范",
                  "objectName": "validationTestVo",
                  "field": "email",
                  "rejectedValue": "12112",
                  "bindingFailure": false,
                  "code": "Email"
              }
          ],
          "path": "/hibernate/test1"
      }
      

    都有哪些注解

    @AssertFalse	限制必须为false
    @AssertTrue	限制必须为true
    @DecimalMax	限制必须为一个不大于指定值的数字
    @DecimalMin	限制必须为一个不小于指定值的数字
    @Digits	限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
    @Null	限制只能为null
    @NotNull	限制必须不为null
    @Email	验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式
    @Future	限制必须是一个将来的日期
    @Max	限制必须为一个不大于指定值的数字
    @Min	限制必须为一个不小于指定值的数字
    @NotBlank	验证注解的元素值不为null且去除空格后长度不为0,@NotBlank只用于字符串
    @NotEmpty	验证注解的元素值不为null且不为空,支持字符串、集合、Map和数组类型
    @Past	限制必须是一个过去的日期
    @Pattern	限制必须符合指定的正则表达式
    @Range	限制必须在合适的范围内
    @Size	限制字符长度必须在min到max之间
    @CreditCardNumber	检查带注释的字符序列是否通过了Luhn校验和测试
    @Currency	检查带注释的货币单位javax.money.MonetaryAmount是否为指定货币单位的一部分
    @EAN	检查带注释的字符序列是否为有效的EAN条形码。type确定条形码的类型。默认值为EAN-13
    @ISBN	检查带注释的字符序列是否为有效的ISBN。type确定ISBN的类型。默认值为ISBN-13
    @Length	验证该注释字符序列是间min和max包含
    @Range	检查带注释的值是否在(包括)指定的最小值和最大值之间
    @Length	限制必须为true
    @Range	限制必须为一个不大于指定值的数字
    @SafeHtml	检查带注释的值是否包含潜在的恶意片段
    @UniqueElements	检查带注释的集合是否仅包含唯一元素
    @URL	根据RFC2396检查带注释的字符序列是否为有效URL
    
    
  • 相关阅读:
    Linux日常测试命令记录
    Python的加密方式:RSA加密
    Python踩坑系列之报错无“winrandom”模块:ModuleNotFoundError: No module named 'winrandom'
    Python踩坑系列之读取文件报错:OSError: [Errno 22] Invalid argument: 'u202aC:/Users/pc/Desktop/jspt.cer'
    Python的加密方式:MD5加密
    Python学习笔记:方法重写的理解
    7月底HTML/CSS学习笔记大纲
    css命名规范及项目文件目录
    css引入方式之外链式和导入式的异同点(面试题)
    CSS4种引入方式:行内,内联式,外部式,导入式
  • 原文地址:https://www.cnblogs.com/pandaNHF/p/15711253.html
Copyright © 2020-2023  润新知