目录

裴先生
裴先生
发布于 2020-11-22 / 0 阅读
0
0

Java Bean Validation 参数校验详解

原创

常用校验注解

数值校验注解

  • @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:只应用于字符串且在比较时会去除字符串的首位空格

原创

版权声明:本博客原创文章,由 裴先生 2020年11月22日 发表。
转载说明:除特殊说明外本站文章皆由 CC BY-NC-SA 4.0 协议发布,转载须注明出处。


评论