【问题标题】:Jersey 1.9 and advanced validationJersey 1.9 和高级验证
【发布时间】:2015-11-03 21:33:11
【问题描述】:

我正在使用带有验证支持的 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> {
        ...
    }
}

我没有运气的尝试:

  1. 创建了一个方法,该方法创建带有 @ValidateOnExecution 注释的 RequestWithResources。 - 验证器没有被调用

  2. someService 被注入控制器时,我尝试用@Valid 注释handle(...) 中的ReqeuestWithResources 参数 - 验证器未执行

  3. @Inject Validator 进入控制器类并在其上运行validate(requestWithResources)。 - 因为无法注入Validator而死去

【问题讨论】:

  • 如果您启用 CDI,您的第三个选项将起作用。这当然取决于您未提及的 CDI 可用性的运行时环境。
  • 很遗憾,我没有启用 CDI 的容器。我希望 Jersey 使用的 Validator 可以通过 HK2 获得。任何见解 Jersey 从哪里获取用于资源方法参数验证的验证器?
  • 看来 jersey 正在为 BV 使用 hibernate impl。你可以这样创建一个默认的ValidatorFactory:ValidatorFactory factory = Validation.buildDefaultValidatorFactory();验证器验证器 = factory.getValidator();但是我不知道如何获得由 jersey 创建的那个
  • 是的,正是这样做的。认为使用泽西的会更干净,但这可能是可以接受的。想要回答吗?

标签: jersey bean-validation


【解决方案1】:

你可以这样创建一个默认的ValidatorFactory:

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

但是,您将在内存中拥有第二个 ValidatorFactory,因为似乎无法获取由 jersey 实例化的那个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 2015-12-29
    • 2013-09-22
    相关资源
    最近更新 更多