我使用Resteasy-Guice将Resteasy与Google Guice结合使用。我一直在寻找验证我的请求主体的方法。我想做的例如:
public static class MyPojo {
@NotEmpty private String contents;
}
然后在我的资源中使用
@POST
@ValidateRequest
public void doPost(@Valid MyPojo myPojo) {
// use myPojo only if valid
}
我一直在使用resteasy-hibernate-validator-provider。但是,自从我切换到更新的版本后,这就引入了(不需要的?)依赖关系到EJB。另见:RESTEASY-1056。在评论中声明您应该切换到较新的验证器-11:
切换到resteasy-validator-provider-11,它实现了更新的Bean Validation 1.1规范。
docs说:
默认情况下启用验证(假设resteasy-validator-provider-11-.jar可用),但可以在validation.xml配置文件中关闭或修改参数和返回值验证。有关详细信息,请参阅Hibernate Validator文档。
但是我无法将此工作用于我的配置,因为我发现自己包含hibernate-validator
,javax.el-api
,javax.el
和hibernate-validator-cdi
等依赖项以及{ {3}}。但是,我没有发现任何被实例化或无效请求被拒绝。
使用Resteasy进行验证的首选,轻量级和工作方式是什么?
答案 0 :(得分:5)
您不必在资源本身上指定任何注释或执行其他配置。只需对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.Final
和5.0.1.Final
答案 1 :(得分:3)
hibernate-validator-provider
有一个传递依赖,导致先前的尝试失败。确保您没有hibernate-validator-provider
的传递依赖。对我来说,这导致了以下异常:issues.jboss.org/browse/RESTEASY-826。javax.validation
,resteasy-validator-provider-11
,hibernate-validator
。java.lang.NoClassDefFoundError: javax/el/PropertyNotFoundException
)。根据{{3}}回答,我添加了javax.el-api
和el-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>