Validation 泽西2号,我的验证人打了两次电话
在玻璃鱼4上使用Jersy 2。 我有一个自定义ConstraintValidator,它被调用来验证bean参数 使用Validation 泽西2号,我的验证人打了两次电话,validation,javabeans,cdi,jersey-2.0,Validation,Javabeans,Cdi,Jersey 2.0,在玻璃鱼4上使用Jersy 2。 我有一个自定义ConstraintValidator,它被调用来验证bean参数 使用@Context将Jersey资源正确地注入到ConstraintValidator。(将@Context更改为@Inject,以解决系统两次调用ConstraintValidator时资源为null的问题。) 问题调用isValid()方法两次我可以看到日志记录在调用update()方法之前被打印了两次 我添加了一个拦截器来进行一些调试日志记录。 首先调用constraint
@Context
将Jersey资源正确地注入到ConstraintValidator
。(将@Context更改为@Inject,以解决系统两次调用ConstraintValidator时资源为null的问题。)
问题调用isValid()
方法两次我可以看到日志记录在调用update()
方法之前被打印了两次
我添加了一个拦截器来进行一些调试日志记录。
首先调用constraintvalidator.isValid(),然后调用我的拦截器,然后再次调用constraintvalidator.isValid(),然后只调用我的REST资源方法
(此类不包含任何注入的资源。)
当您说注入的资源为空时,不清楚您指的是什么。您的示例中没有注入的资源。您是指方法参数吗?不,这个示例没有注入资源,但是在这个示例和其他用例中调用了两次isValid()方法(以及constraintvalidator的init方法)。我注入的资源是restejb资源,用于访问持久化单元?
public class StudyValidator implements ConstraintValidator<StudyCheck, StudyBeanREST> {
private static final Logger log = Logger.getLogger(StudyValidator.class);
@Override
public void initialize(StudyCheck constraintAnnotation) {
}
@Override
public boolean isValid(StudyBeanREST study, ConstraintValidatorContext context) {
log.info("Validating study: " + study);
Integer version = study.getVersion();
if(version == null || version < 0) {
return false;
}
return true;
}
}
@Target({ElementType.PARAMETER,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {StudyValidator.class})
public @interface StudyCheck {
String message() default "{error.version}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
@PUT
@RolesAllowed({"management"})
public StudyBeanREST update(@StudyCheck StudyBeanREST study) throws RecordNotFoundException, UpdateNotAllowedException {
Study updated = studyEJB.update(study.getJpa());
study.setJpa(updated);
return study;
}