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-validator
、javax.el-api
、javax.el
和hibernate-validator-cdi
这样的依赖项和像^{
使用Resteasy进行验证的首选、轻量级和工作方式是什么
# 1 楼答案
您不必在资源本身上指定任何注释或进行其他配置。只要POJO上的约束注释就足以让它工作
我的设置如下:
资源方法:
POJO:
使用以下依赖项进行测试:
javax.validation
版本1.1.0.Final
resteasy-validator-provider-11
版本3.0.11.Final
hibernate-validator
版本5.0.0.Final
和5.0.1.Final
# 2 楼答案
hibernate-validator-provider
有一个可传递的依赖项,这导致以前的尝试失败。确保对hibernate-validator-provider
没有可传递的依赖关系。对我来说,这导致了以下例外:问题。jboss。org/browse/RESTEASY-826李>javax.validation
、resteasy-validator-provider-11
、hibernate-validator
添加了依赖项李>java.lang.NoClassDefFoundError: javax/el/PropertyNotFoundException
)。基于this答案,我添加了javax.el-api
和el-impl
作为依赖项。我认为这是因为我使用了一个嵌入式servlet容器李>@ValidateOnRequest
注释,它们不再是必需的了最终工作配置: