有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我将Resteasy与使用Resteasy Guice的googleguice结合使用。我一直在寻找验证我的请求的方法。例如,我想做:

public static class MyPojo {

   @NotEmpty private String contents;

}

然后在我的资源中使用

@POST
@ValidateRequest
public void doPost(@Valid MyPojo myPojo) {
   // use myPojo only if valid
}

我一直在使用resteasy hibernate验证程序提供程序。但自从我切换到新版本后,这就引入了(不需要的?)对EJB的依赖性。另见:RESTEASY-1056。注释中指出,您应该切换到较新的validator-11:

Switch to resteasy-validator-provider-11, which implements the newer Bean Validation 1.1 specification.

主席说:

Validation is turned on by default (assuming resteasy-validator-provider-11-.jar is available), though parameter and return value validation can be turned off or modified in the validation.xml configuration file. See the Hibernate Validator documentation for the details.

然而,我没有设法让它在我的配置中工作,因为我发现自己包含了像hibernate-validatorjavax.el-apijavax.elhibernate-validator-cdi这样的依赖项和像^{}这样的注释。但是,我没有发现任何实例或无效请求被拒绝

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


共 (2) 个答案

  1. # 1 楼答案

    您不必在资源本身上指定任何注释或进行其他配置。只要POJO上的约束注释就足以让它工作

    我的设置如下:

    资源方法:

    @POST
    public void doPost(@Valid MyPojo myPojo) {
       // use myPojo only if valid
    }
    

    POJO:

    public static class MyPojo {
       @NotEmpty private String contents;
    }
    

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

    javax.validation版本1.1.0.Final

    resteasy-validator-provider-11版本3.0.11.Final

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

  2. # 2 楼答案

    • 我意外地对hibernate-validator-provider有一个可传递的依赖项,这导致以前的尝试失败。确保对hibernate-validator-provider没有可传递的依赖关系。对我来说,这导致了以下例外:问题。jboss。org/browse/RESTEASY-826
    • 基于Thomas answer,我向javax.validationresteasy-validator-provider-11hibernate-validator添加了依赖项
    • 然后我仍然收到异常(java.lang.NoClassDefFoundError: javax/el/PropertyNotFoundException)。基于this答案,我添加了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>