Jersey 1.9和高级验证

时间:2015-11-03 21:33:12

标签: jersey bean-validation

我使用Jersey 1.9进行验证支持,并使用资源方法:

@POST
public Response createNewOozieTransformation(
    @FormDataParam("info") SomeInfo info,
    @FormDataParam("zippedResources") InputStream zippedResources) {

    ...
    Collection<Resource> resources = resourcesService.extractResources(zippedResources);

    //This needs to be validated
    RequestWithResources requestWithResources = new RequestWithResources(info, resources);

    someService.handle(requestWithResources);
}

我正在为SomeInfo使用bean验证,其中一些参数是例如@NotNullRequestWithResouces这一切都很好。我想验证SomeInfo,但我不知道如何。请注意RequestWithResources包含有关所需资源的动态信息,因此我需要整个RequestWithResources才能执行验证。

我的@ValidateMandatoryResources在课程级别上有自定义@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) @Constraint(validatedBy = ValidateMandatoryResources.ResourcesValidator.class) public @interface ValidateMandatoryResources { ... class ResourcesValidator implements ConstraintValidator<ValidateMandatoryResources, RequestWithResources> { ... } } 注释:

RequestWithResources

我没有运气的尝试:

  1. 创建了一个用@ValidateOnExecution创建someService注释的方法。 - 未调用验证器

  2. ReqeuestWithResources注入控制器时,我尝试使用handle(...)注释@Valid @Inject Validator中的validate(requestWithResources)参数 - 验证程序未执行

  3. Validator writetable('sensordata.csv','temps') 进入控制器类并在其上运行Undefined function 'write' for input arguments of type 'char'.。 - 因为无法注入I want to go from: a b c A 1 2 3 B -1 -2 -3 a b c d e f g A 1 2 3 4 5 6 7 B -1 -2 -3 -4 -5 -6 -7

  4. 而死亡

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式创建默认的ValidatorFactory:

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

但是你在内存中会有第二个ValidatorFactory,因为它似乎无法获得由jersey实例化的那个。