2015-11-03 58 views
1

我使用的是1.9澤西與驗證的支持,並具有類似資源的方法:新澤西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); 
} 

我使用Bean驗證了SomeInfo,它的一些外觀和數據例如@NotNull和這一切工作正常。我想驗證RequestWithResouces以及但我不知道如何。請注意,SomeInfo包含有關所需資源的動態信息,因此我需要整個RequestWithResources才能執行驗證。

RequestWithResources有一流水平的定製@ValidateMandatoryResources註釋:

@Retention(RetentionPolicy.RUNTIME) 
@Target({ElementType.TYPE}) 
@Constraint(validatedBy = ValidateMandatoryResources.ResourcesValidator.class) 
public @interface ValidateMandatoryResources { 

    ... 

    class ResourcesValidator implements ConstraintValidator<ValidateMandatoryResources, RequestWithResources> { 
     ... 
    } 
} 

我已經沒有運氣嘗試:

  1. 創建了創建RequestWithResources標註與@ValidateOnExecution的方法。 - 驗證沒有被引用

  2. 由於someService注入我試圖註釋ReqeuestWithResources參數在它的handle(...)@Valid控制器 - 驗證未執行

  3. @InjectValidator到控制器類上運行validate(requestWithResources)它。 - 死因爲不能注入Validator

+0

如果您啓用CDI,您的第三個選項將起作用。這取決於你的運行時間env CDI可用性,你沒有提到。 – Franck

+0

不幸的是,我沒有啓用CDI容器。我希望澤西使用的Validator可以通過HK2獲得。澤西獲得用於資源方法參數驗證的Validator的任何見解? –

+0

看來澤西島正在使用hibernate impl for BV。您可以通過以下方式創建默認的ValidatorFactory:ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator();但我不知道如何獲得由澤西 – Franck

回答

1

您可以創建一個默認ValidatorFactory這樣:

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

但是你必須在存儲器中的第二ValidatorFactory,因爲它似乎不可能得到一個保持由球衣實例化。