ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【SpringBoot】SpringBoot集成hibernate-validator

2021-12-20 16:03:24  阅读:173  来源: 互联网

标签:hibernate SpringBoot validator arguments codes defaultMessage null validationTes


为什么用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

标签:hibernate,SpringBoot,validator,arguments,codes,defaultMessage,null,validationTes
来源: https://www.cnblogs.com/pandaNHF/p/15711253.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有