Resteasy Beanvalidation未被调用

问题背景

我有一个Resteasy服务,通过Resteasy的SpringContextLoaderListener使用Spring。 这是基于Resteasy版本3.0-beta-6

我想对传入的请求使用beanvalidation,但我无法让Resteasy调用validation器。 它的行为就像没有配置validation一样,只是将方法传递给无效的输入对象。

  1. 如何在Resteasy中启用beanvalidation?

我试过的

我做了以下事情:

  1. @ValidateRequest注释我的资源类
  2. 使用@Valid注释方法参数
  3. 注释我的输入类的约束。
  4. 添加了对resteasy-hibernatevalidator-provider的依赖

资源:

 @Named @Path("users") @ValidateRequest public class UserResource { /** * * @param user * * curl -x POST http://localhost:7016/api/1.0/users * */ @POST @Consumes({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON}) public Response createUser(@Valid User user) { //User creation logic here. } } 

用户POJO:

 @JsonPropertyOrder({ "user_id", "user_name", "email" }) public class User { @JsonProperty("user_id") private Long userId; @JsonProperty("user_name") @NotNull(message = "Username must be provided") private String username; @Email(message = "Invalid email address.") private String email; //Getters and Setters Removed for Brevity } 

POM条目validation:

   org.jboss.resteasy resteasy-hibernatevalidator-provider ${resteasy.version}  

resteasy-hibernatevalidator-provider依赖项resteasy-hibernatevalidator-providerHibernateValidatorContextResolver及其关联的HibernateValidatorAdapter


更新(2013年6月18日):

我将我的pom中的Resteasy版本恢复为2.3.5.Final和beanvalidation开始工作而没有任何代码更改。

你做到了这个:

为RESTEasy提供ValidatorAdapter

RESTEasy将尝试通过类路径中的ContextResolver提供程序获取ValidatorAdapter的实现。 我们可以为RESTEasy提供如下实现:

 @Provider public class MyValidatorContextResolver implements ContextResolver { @Override public ValidatorAdapter getContext(Class type) { return new MyValidator(); } } 

确保你的战争中定义了META-INF / services / javax.ws.rs.Providers。

您可以使用resteasy-3.0提供的hibernatevalidation器。

检查resteasy文档的第48章:

http://docs.jboss.org/resteasy/docs/3.0.0.Final/userguide/html_single/index.html#JBoss AS 6

运行Resteasy’3.0.6.Final’和Spring’4.1.0.RELEASE’。

‘resteasy-hibernatevalidator-provider’不会评估@Valid带注释的参数。 使用’resteasy-validator-provider-11’可以使一切正常运行,并且使用Hiberbatevalidation器’5.0.1.Final’而不是在使用’resteasy-hibernatevalidator-provider’时需要Hibernatevalidation器版本4。