@Max、@Min、@Length、@Size 还是傻傻分不清?

  • A+
所属分类:编程茶楼


共计 1688 个字符,预计需要花费 5 分钟才能阅读完成。

@Max 可用于数字和字符串(字符串必须为数值型),其值必须小于等于指定的最大值

@Min 可用于数字和字符串(字符串必须为数值型),其值必须大于等于指定的最小值

@Length 可用于字符串,其长度必须在指定的范围内

@Size 可用于字符串、List、数组,其长度必须在指定的范围内

补充:
我们平时开发,只是加上注解这么简单?到底是怎么实现的参数校验?

添加两个依赖:

       <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.1.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.2.4.Final</version>
        </dependency>

具体实现:

    import lombok.Data;

    import javax.validation.ConstraintViolation;
    import javax.validation.Validation;
    import javax.validation.Validator;
    import javax.validation.constraints.Size;
    import java.util.Arrays;
    import java.util.List;
    import java.util.Set;

    /**
     * @author plm
     * @create 2021/2/20 22:56
     */
    @Data
    class Desk {
        @Size(min = 2, max = 5)
        private String str1;

        @Size(min = 2, max = 3)
        private List list1;

        @Size(min = 2, max = 3)
        private int[] arr1;
    }

    public class ValidationApiDemo {
        public static void main(String[] args) {
            Desk desk1 = new Desk();
            String[] strings = {"1", "2", "3", "4"};
            List<String> list = Arrays.asList(strings);
            desk1.setList1(list);
            desk1.setStr1("123320");
            desk1.setArr1(new int[]{1, 2, 3, 5});
            validate(desk1);
        }

        private static void validate(Desk desk1) {
            Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
            Set<ConstraintViolation<Desk>> validate = validator.validate(desk1);
            for (ConstraintViolation<Desk> cv : validate) {
                System.out.println(cv.getRootBean().getClass().getName() + "类的"
                        + cv.getPropertyPath() + "属性 -> " + cv.getMessage());
            }
        }
    }

    /*
    com.peiluming.round_1.Desk类的str1属性 -> 个数必须在2和5之间
    com.peiluming.round_1.Desk类的list1属性 -> 个数必须在2和3之间
    com.peiluming.round_1.Desk类的arr1属性 -> 个数必须在2和3之间
    */

其他常用注解:
@NotNull 被注释的元素不为null
@Valid 递归的对关联对象进行校验
@NotEmpty 被注释的元素不为空(可用于String,Collection,Map,arrays)
@NotBlank 只应用于字符串且在比较时会去除字符串的首位空格

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: