使用Resteasy验证请求的正确方法是什么?

Jan*_*ing 7 java jboss jax-rs hibernate-validator resteasy

我使用Resteasy-Guice将Resteasy与Google Guice结合使用.我一直在寻找验证我的请求主体的方法.我想做的例如:

public static class MyPojo {

   @NotEmpty private String contents;

}
Run Code Online (Sandbox Code Playgroud)

然后在我的资源中使用

@POST
@ValidateRequest
public void doPost(@Valid MyPojo myPojo) {
   // use myPojo only if valid
}
Run Code Online (Sandbox Code Playgroud)

我一直在使用resteasy-hibernate-validator-provider.但是,自从我切换到更新的版本后,这就引入了(不需要的?)依赖关系到EJB.另请参见:RESTEASY-1056.在评论中声明您应该切换到较新的验证器-11:

切换到resteasy-validator-provider-11,它实现了更新的Bean Validation 1.1规范.

文件说:

默认情况下启用验证(假设resteasy-validator-provider-11-.jar可用),但可以在validation.xml配置文件中关闭或修改参数和返回值验证.有关详细信息,请参阅Hibernate Validator文档.

然而,我不设法得到这个工作,我的配置,因为我发现自己包括像依赖性hibernate-validator,javax.el-api,javax.elhibernate-validator-cdi 和注释喜欢ValidateOnExecution.但是,我没有发现任何实例化或无效请求被拒绝.

使用Resteasy进行验证的首选,轻量级和工作方式是什么?

Tho*_*ith 5

您不必在资源本身上指定任何注释或执行其他配置.只需对POJO进行约束注释即可使其正常工作.

我的设置如下:

资源方法:

@POST
public void doPost(@Valid MyPojo myPojo) {
   // use myPojo only if valid
}
Run Code Online (Sandbox Code Playgroud)

POJO:

public static class MyPojo {
   @NotEmpty private String contents;
}
Run Code Online (Sandbox Code Playgroud)

使用以下依赖项进行测试:

javax.validation1.1.0.Final

resteasy-validator-provider-113.0.11.Final

hibernate-validator版本5.0.0.Final5.0.1.Final


Jan*_*ing 5

  • 我无意间对造成了传递依赖,hibernate-validator-provider从而导致先前的尝试失败。确保您没有对的传递依赖hibernate-validator-provider。对我来说,这导致了以下异常:issue.jboss.org/browse/RESTEASY-826。
  • 根据托马斯的答案我添加依赖关系javax.validationresteasy-validator-provider-11hibernate-validator
  • 然后,我仍然收到异常(java.lang.NoClassDefFoundError: javax/el/PropertyNotFoundException)。基于答案,我添加了javax.el-apiel-impl作为依赖项。我认为这是因为我使用了嵌入式servlet容器。
  • 我不得不删除@ValidateOnRequest资源上的注释,它们不再是必需的

最终工作配置:

    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.1.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-validator-provider-11</artifactId>
        <version>3.0.11.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.0.1.Final</version>
    </dependency>
    <dependency>
        <groupId>javax.el</groupId>
        <artifactId>javax.el-api</artifactId>
        <version>3.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>el-impl</artifactId>
        <version>2.2</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

  • 不需要添加`hibernate-validator`依赖(现在它的`groupId`是`org.hibernate.validator`),因为它已经包含在`resteasy-validator-provider-11`中(即`resteasy-validator-provider`) ` 自 RestEasy 4.0.0 版本起) (2认同)