当前位置: 首页 > 知识库问答 >
问题:

javax验证约束注释在验证期间被忽略

陈康胜
2023-03-14

(仅在测试中使用)我有依赖项(没有spring或DI容器)

    testCompile("javax.validation:validation-api:2.0.1.Final")
    testCompile("org.hibernate.validator:hibernate-validator:6.0.13.Final")
    testCompile("org.glassfish:javax.el:3.0.0")

我可以通过

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
violations = validator.validate(myDto);

myDto在哪里

@RestrictionsAreValid
public class MyDto {    
       @NotNull
       @Positive
       private Integer value;
}

哪里

 @Target(TYPE_USE)
    @Retention(RUNTIME)
    @Constraint(validatedBy = RestrictionsAreValidImpl.class)
    public @interface RestrictionsAreValid {    
        String message() default "";    
        Class<?>[] groups() default {};    
        Class<? extends Payload>[] payload() default {};
    }

哪里

public class RestrictionsAreValidImpl implements ConstraintValidator<RestrictionsAreValid, MyDto> {
    @Override
    public boolean isValid(MyDto myDto, ConstraintValidatorContext context) { 
     some code
    } 
}

在这个验证器中,所有的工作都很完美,但没有任何注释avax。验证。限制。NotNulljavax。验证。限制。积极的在现场发挥作用,他们只是被忽略了

请帮忙。断然的

很抱歉,我的真实案例是相互嵌套的DTO,所以只有高级类经过验证,但没有嵌套。

@RestrictionsAreValid
public class MyDto {    

    @Valid //  this annotation solve problem, and so on deeper in stricture
    private Map<String, AnotherDto> map;
}

而另一个有注释的字段未经验证。当我在map字段中添加@Valid时,它开始正常工作

共有1个答案

凌修伟
2023-03-14

对于我使用的课程,如下所示:

@Documented
@Constraint(validatedBy = RestrictionsAreValidImpl.class)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface RestrictionsAreValid {

    /**
     * message for exceptional case.
     *
     * @return message
     */
    String message() default "";

    /**
     * Groups allow you to restrict the set of constraints applied during validation.
     *
     * @return arrays of group classes.
     */
    Class<?>[] groups() default {};

    /**
     * Payloads can be used by clients of the Bean Validation API to assign custom payload objects to a constraint.
     * This attribute is not used by the API itself.
     *
     * @return arrays of payload classes.
     */
    Class<? extends Payload>[] payload() default {};
}

public class RestrictionsAreValidImpl implements ConstraintValidator<RestrictionsAreValid, MyDto> {
    @Override
    public boolean isValid(MyDto myDto, ConstraintValidatorContext context) { 
     some code
    } 
}

而不是DTO:

@RestrictionsAreValid
public class DTO{
}
 类似资料:
  • 我正在尝试设置一个验证来比较两个日期。一个日期应该比另一个日期短。 此外,我为我的两个约会都创建了一个自定义约束。但问题是,我的注释接口无法处理非原始数据类型。 这是我的代码:(我知道这是错误的,但如果我展示我的源代码,也许你可以理解我的问题) 豆子: 注释界面: 所以这里有一个问题:我试图将类型放入类型。但是,如果我将我的和声明为,则存在一个问题: 还有其他方法来比较两次约会吗? 我错过了什么?

  • 我一直在尝试单元测试(不运行Spring容器)我的自定义约束注释,但当我运行测试时,会抛出NullPointerException,我不知道为什么会发生这种情况。 NullPointerException指出Validator类中的。 我一直在关注这个答案https://stackoverflow.com/a/41671471/9377513当我写测试的时候。但我不知道为什么这种方法在我的情况下不

  • 我有一个使用javax注释的jax-rs项目(

  • 我想知道是否有可能将一些自定义类型的新约束验证器注册到Bean验证规范定义的注释中。例如,让我们想象一下,我有一个类,它累加了几个int值 我想注册一个自定义约束验证器来支持这种类型的@正向注释(而不是创建自定义注释)。 这样以后我就可以使用这个:

  • 我使用的是Swagger(1.5.8),我想让我的定义检测DTO上的JSR-303注释,这样我就可以记录API的验证约束。 我希望注释(如本例)会显示关于最小值(44)的一些信息,但它不会。 由此产生的是: Swagger已经关闭了该功能的拉取请求,但我不清楚它在Swagger定义中的位置/方式。 我希望能够做这样的事情: 配置Swagger模块/插件以启用和等功能的首选方法是什么,以便他们检查我

  • 我有以下验证器,用于验证更新请求。 object.getIdCreditor()有一个值,但是findById方法的执行["CreditorRepository.findById(object.getIdCreditor())" ] 进入NullPointer异常 我不明白怎么了。