Jersey 1.9 和高级验证
Jersey 1.9 and advanced 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 验证,它的一些参数是例如@NotNull
一切正常。我也想验证 RequestWithResouces
但我不知道如何验证。请注意 SomeInfo
包含有关所需资源的动态信息,因此我需要整个 RequestWithResources
才能执行验证。
我的 RequestWithResources
在 class 级别上有自定义 @ValidateMandatoryResources
注释:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Constraint(validatedBy = ValidateMandatoryResources.ResourcesValidator.class)
public @interface ValidateMandatoryResources {
...
class ResourcesValidator implements ConstraintValidator<ValidateMandatoryResources, RequestWithResources> {
...
}
}
我尝试过但没有成功的方法:
创建了一个方法,它创建了 RequestWithResources
注释 @ValidateOnExecution
。 - 未调用验证程序
由于 someService
被注入到控制器中,我试图在它的 handle(...)
中用 @Valid
注释 ReqeuestWithResources
参数 - 验证器未执行
@Inject
Validator
控制器class和运行validate(requestWithResources)
就可以了。 - 因为无法注入 Validator
而死
您可以通过这种方式创建默认的 ValidatorFactory:
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
但是,您将在内存中拥有第二个 ValidatorFactory,因为它似乎无法获取由 jersey 实例化的那个。
我正在使用具有验证支持的 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 验证,它的一些参数是例如@NotNull
一切正常。我也想验证 RequestWithResouces
但我不知道如何验证。请注意 SomeInfo
包含有关所需资源的动态信息,因此我需要整个 RequestWithResources
才能执行验证。
我的 RequestWithResources
在 class 级别上有自定义 @ValidateMandatoryResources
注释:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Constraint(validatedBy = ValidateMandatoryResources.ResourcesValidator.class)
public @interface ValidateMandatoryResources {
...
class ResourcesValidator implements ConstraintValidator<ValidateMandatoryResources, RequestWithResources> {
...
}
}
我尝试过但没有成功的方法:
创建了一个方法,它创建了
RequestWithResources
注释@ValidateOnExecution
。 - 未调用验证程序由于
someService
被注入到控制器中,我试图在它的handle(...)
中用@Valid
注释ReqeuestWithResources
参数 - 验证器未执行@Inject
Validator
控制器class和运行validate(requestWithResources)
就可以了。 - 因为无法注入Validator
而死
您可以通过这种方式创建默认的 ValidatorFactory:
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
但是,您将在内存中拥有第二个 ValidatorFactory,因为它似乎无法获取由 jersey 实例化的那个。