2015-06-20 73 views
7

我使用Resteasy与Google Guice结合使用Resteasy-Guice。我一直在寻找方法来验证我的请求机构。我想例如做:使用Resteasy验证请求的正确方法是什么?

public static class MyPojo { 

    @NotEmpty private String contents; 

} 

然后在我的资源使用

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

我已与RestEasy的-休眠-验证提供者的工作。但是,由于我切换到更新的版本,这引入了(不需要的)对EJB的依赖。另见:RESTEASY-1056。在评论中指出,你应该切换到更新的验证器-11:

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

docs说:

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

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

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

回答

3
  • 我意外了传递依赖于hibernate-validator-provider造成之前尝试失败。确保您对hibernate-validator-provider没有传递依赖性。对我来说,这造成了以下异常:issues.jboss。org/browse/RESTEASY-826。
  • 基于Thomas answer我将依赖关系添加到javax.validation,resteasy-validator-provider-11,hibernate-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> 
4

您不必在资源本身指定任何注释或进行其他配置。只是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

+0

我已删除了所有的验证依赖关系,然后插入相同的版本你。然而,我现在遇到了以下问题:https://issues.jboss.org/browse/RESTEASY-826 –

相关问题