泽西2约束生效者被召唤两次

时间:2013-07-20 22:43:57

标签: validation javabeans cdi jersey-2.0

在Glassfish 4上使用Jersy 2。 我有一个自定义的ConstraintValidator,用于验证bean参数。

使用ConstraintValidator向泽西资源正确注入@Context。 (当系统调用两次ConstraintValidator时,将@Context更改为@Inject以解决资源为空的问题。)

问题isValid()方法被调用两次我可以看到在调用update()方法之前两次打印日志。

我添加了一个拦截器来进行一些调试日志记录。 首先调用constraintvalidator.isValid()然后调用我的拦截器,然后再调用constraintvalidator.isValid(),然后再调用我的REST资源方法。

(此类不包含任何注入的资源。)

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;
  }

0 个答案:

没有答案