【问题标题】:Spring DTO validation using ConstraintValidator使用 ConstraintValidator 进行 Spring DTO 验证
【发布时间】:2019-10-16 07:30:42
【问题描述】:

我使用的 DTO 使用 javax.validation 注释进行了注释

例如

@JsonIgnoreProperties(ignoreUnknown = true)
public class StudentDTO {

@NotEmpty
private String name;

@Positive
private Long studentId;

}

如果我必须使用 StudentDTO 的 ConstraintValidator 进行验证怎么办

【问题讨论】:

    标签: java spring spring-boot javax.validation


    【解决方案1】:

    Spring MVC 能够自动验证@Controller 输入。在以前的版本中,由开发人员手动决定 调用验证逻辑。

    但是在您的情况下,您正在尝试验证 DTO 对象,在这种情况下,springboot 可能不会自动将您的验证器绑定到您的模型并调用验证器。因此,在这种情况下,您将需要手动绑定该对象给验证者。

    或者您可以手动调用 bean 上的验证器,例如:

    @AutoWired
    Validator validator;
    ...
    
    validator.validate(book);
    

    如果需要,可以在 springboot 中为模型类定义自定义验证器并使用注释:

    @Documented
    @Constraint(validatedBy = CustomDataValidator.class)
    @Target( { ElementType.METHOD, ElementType.FIELD })
    @Retention(RetentionPolicy.RUNTIME)
    public @interface CustomDataConstraint {
        String message() default "Invalid data";
        Class<?>[] groups() default {};
        Class<? extends Payload>[] payload() default {};
    }
    

    然后定义一个验证器类,如:

    public class CustomDataValidator implements
      ConstraintValidator<CustomDataConstraint, String> {
    
        @Override
        public void initialize(CustomDataConstraint data) {
        }
    
        @Override
        public boolean isValid(String field,
          ConstraintValidatorContext cxt) {
            return field!= null;
        }
    
    }
    

    你的验证器类必须实现ConstraintValidator接口并且必须实现isValid方法来定义验证规则,定义验证规则可以是任何你想要的。然后,你可以简单地在你的字段中添加注释,比如:

    @CustomDataConstraint 
    private String name;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多