【问题标题】:Endpoint Validation(@Valid, @Pattern, etc) with Optional带有可选的端点验证(@Valid、@Pattern 等)
【发布时间】:2021-04-28 17:39:48
【问题描述】:

我们需要将某些对象包装在可选项中,因为我们需要知道三种状态:

  • 缺失(不存在)
  • 空(存在但为空)
  • 数据(与数据一起出现)

目前我们正在使用 Optional 包装这些字段,因为 spring rest 端点会给我们这些状态为 null、Optional.empty() 和 Optional.of(value)。

但是,验证似乎不起作用。除了添加@Valid、@Pattern、@NotNull 等,我是否需要做一些不同的事情??

注意:此问题中有更详细的需求细分 (Java Spring (Jackson) Annotation for Not Present, Present but Null, and Present with Value)

【问题讨论】:

  • 查看这个答案link

标签: java spring annotations spring-annotations


【解决方案1】:

添加 javax.validation 依赖

以下是添加验证的 3 个步骤。

  1. 在 POJO 类中的数据成员上添加 @NonNull
    class Employee
    {
        @NonNull
        String name;
    }
  1. 创建以下方法
    private void validate(Employee emp){
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        Validator validator = factory.getValidator();
        Set<ConstraintViolation<Employee>> violations = validator.validate(emp)
        for(ConstraintViolation<Employee> violation: violations) {
            //Your action. May be throw exception
        }
    }
  1. 在使用对象的地方添加 @Valid 并调用 validate 方法
    void method(@Valid Employee emp){
        validate(emp);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    相关资源
    最近更新 更多