首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Resteasy验证请求的正确方法是什么?

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

Stack Overflow用户
提问于 2015-06-20 17:08:59
回答 2查看 9.8K关注 0票数 8

我使用Resteasy与Google结合使用Resteasy-Guice。我一直在寻找方法来验证我的请求机构。我想举个例子:

代码语言:javascript
复制
public static class MyPojo {

   @NotEmpty private String contents;

}

然后在我的资源中使用

代码语言:javascript
复制
@POST
@ValidateRequest
public void doPost(@Valid MyPojo myPojo) {
   // use myPojo only if valid
}

我一直在使用resteasy-hibernate-验证器-提供程序。但是由于我改用了更新的版本,这引入了(不想要的?)依赖于EJB。另见:RESTEASY-1056。在注释中,您应该切换到更新的验证器-11,而不是:

切换到resteasy-验证器-provider-11,它实现了更新的Bean验证1.1规范。

docs说:

在默认情况下,验证是打开的(假设resteasy-验证器-提供者-11-..jar是可用的),尽管参数和返回值验证可以在validation.xml配置文件中关闭或修改。有关详细信息,请参阅Hibernate Validator文档。

但是,我无法成功地将其应用到我的配置中,因为我发现自己包括hibernate-validatorjavax.el-apijavax.elhibernate-validator-cdi之类的依赖项,以及像ValidateOnExecution这样的注释。但是,我没有发现其中任何一个被实例化或无效请求被拒绝。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-05 12:00:15

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

最后工作配置:

代码语言:javascript
复制
    <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>
票数 5
EN

Stack Overflow用户

发布于 2015-06-20 21:02:30

您不必对资源本身指定任何注释或执行其他配置。仅仅是POJO上的约束注释就足够让它正常工作了。

我的设置如下:

资源方法:

代码语言:javascript
复制
@POST
public void doPost(@Valid MyPojo myPojo) {
   // use myPojo only if valid
}

POJO:

代码语言:javascript
复制
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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30956760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档