• 【校验处理】一、Java Bean Validation验证


    在真实的开发中,我们经常会遇到需要对数据进行校验的业务,那么本篇文章对此进行总结。暂时总结三种方法,大家可以根据需要选择使用。

    一、Java Bean Validation 验证  【校验处理】一、Java Bean Validation验证  

    二、SpringBoot Validate 统一处理  【校验处理】二、SpringBoot Validate 统一处理

    三、Spring Validation 校验处理   【校验处理】三、Spring Validation 校验处理

    本篇文章采用第一种Java Bean Validation的验证方式。话不多说,直接上代码。

    1. 引入依赖

    注意:java bean validation参数验证,在使用的时候,有时候会报错,原因是跟spring版本不兼容,这里演示的版本如下:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.1.1.Final</version>
    </dependency>
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.1.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.3.1.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>

    2. 测试实体类

    注意:将需要的校验规则直接通过注解写在实体类对应字段上即可

    @Data
    @AllArgsConstructor
    public class Test {
        @Length(min = 1,max = 5,message = "姓名长度应该在1-5之间")
        private String name;
        @Range(min = 1,max = 100,message = "年龄应该在1-100之间")
        private Integer age;
        @DecimalMax(value = "100.00",message = "体重有些超标哦")
        @DecimalMin(value = "60.00",message = "多吃点饭吧")
        private BigDecimal weight;
        @Future(message = "元素必须是一个将来的日期")
        @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
        private Date date;
        @AssertTrue(message = "此值只能为true")
        private Boolean isuser;
        @Email(message = "邮箱地址无效")
        private String email;
    }

    3. 校验工具类

    注意:

    (1)如果想要使用,直接调用ValidationUtils.validate参数直接传实体对象即可。

    (2)validate方法可以优化,常见的是新建一个set集合,将所有的提示消息放到set中之后返回即可。

    public class ValidationUtils implements Serializable {
        public static void main(String[] args) {
            Test test = new Test("张三张三张三",0,new BigDecimal(110.00),new Date(),false,"12345");
            validate(test);
        }
    
        private static ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
    
        public static <T> String validate(T t) {
    
            try {
                Validator validator = factory.getValidator();
                Set<ConstraintViolation<T>> constraintViolations = validator.validate(t);
                for (ConstraintViolation<T> constraintViolation : constraintViolations) {
                    System.out.println("invalidvalue: "+constraintViolation.getInvalidValue() == null?"":constraintViolation.getInvalidValue().toString()+"  propertypath: "+constraintViolation.getPropertyPath()+"  message: "+constraintViolation.getMessage());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return "";
        }
    }

    4. 总结一波实体类上支持的注解

    参考:

    1. https://www.cnblogs.com/xiaogangfan/p/5987659.html

    2. https://cloud.tencent.com/developer/ask/126580

    持续更新!!!

  • 相关阅读:
    vue路由动态过渡效果
    完美解决safari、微信浏览器下拉回弹效果
    从零开始搭建VUE项目
    上传图片(photoClip)
    手机移动端input date placehoder不显示
    evaluate-reverse-polish-notation
    Minimum Depth of Binary Tree
    前端学习02-01分帧的作用
    前端学习02-01表格标签
    前端学习01-07图像地图
  • 原文地址:https://www.cnblogs.com/flyinghome/p/14597256.html
Copyright © 2020-2023  润新知