我使用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
才能执行验证。
我的@ValidateMandatoryResources
在课程级别上有自定义@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Constraint(validatedBy = ValidateMandatoryResources.ResourcesValidator.class)
public @interface ValidateMandatoryResources {
...
class ResourcesValidator implements ConstraintValidator<ValidateMandatoryResources, RequestWithResources> {
...
}
}
注释:
RequestWithResources
我没有运气的尝试:
创建了一个用@ValidateOnExecution
创建someService
注释的方法。 - 未调用验证器
当ReqeuestWithResources
注入控制器时,我尝试使用handle(...)
注释@Valid
@Inject
Validator
中的validate(requestWithResources)
参数 - 验证程序未执行
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
答案 0 :(得分:1)
您可以通过以下方式创建默认的ValidatorFactory:
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
但是你在内存中会有第二个ValidatorFactory,因为它似乎无法获得由jersey实例化的那个。