Resteasy Bean验证未被调用

时间:2013-06-09 00:36:55

标签: java spring resteasy bean-validation

问题背景

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

我想对传入的请求使用bean验证,但我无法让Resteasy调用验证器。它的作用就像没有配置验证,只是将方法传递给无效的输入对象。

问题

  1. 如何在Resteasy中启用bean验证?
  2. 我尝试过什么

    我做了以下事情:

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

      资源:

      @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条目:

          <dependency>
              <groupId>org.jboss.resteasy</groupId>
              <artifactId>resteasy-hibernatevalidator-provider</artifactId>
              <version>${resteasy.version}</version>
          </dependency>
      

      resteasy-hibernatevalidator-provider依赖项会带来HibernateValidatorContextResolver及其关联的HibernateValidatorAdapter


      更新(2013年6月18日):

      我将我的pom中的Resteasy版本恢复为2.3.5.Final,并且bean验证在没有任何代码更改的情况下开始工作。

3 个答案:

答案 0 :(得分:0)

你做到了吗:

向RESTEasy提供ValidatorAdapter

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

@Provider
public class MyValidatorContextResolver implements ContextResolver<ValidatorAdapter> {

   @Override
   public ValidatorAdapter getContext(Class<?> type) {
      return new MyValidator(); 
   }

}

答案 1 :(得分:0)

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

您可以使用resteasy-3.0提供的休眠验证器。

检查resteasy文档的第48章:

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

答案 2 :(得分:0)

使用Resteasy&#39; 3.0.6.Final&#39;和Spring&#39; 4.1.0.RELEASE&#39;。

&#39; resteasy-hibernatevalidator-provider&#39;不评估@Valid带注释的参数。使用&#39; resteasy-validator-provider-11&#39;让一切正常,奖励是使用Hiberbate验证器&#39; 5.0.1.Final&#39;使用&#39; resteasy-hibernatevalidator-provider&#39;而不是需要Hibernate验证器版本4。