8

问题背景

我有一个通过 Resteasy 使用 Spring 的 Resteasy 服务SpringContextLoaderListener。这是建立在 Resteasy 版本上的3.0-beta-6

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

问题

  1. 如何在 Resteasy 中启用 bean 验证?

我试过的

我做了以下事情:

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

    <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 验证开始工作,无需任何代码更改。

4

3 回答 3

1

使用 Resteasy '3.0.6.Final' 和 Spring '4.1.0.RELEASE' 运行。

'resteasy-hibernatevalidator-provider' 不评估 @Valid 带注释的参数。使用 'resteasy-validator-provider-11' 可以使一切正常工作,并且在使用 'resteasy-hibernatevalidator-provider' 时使用 Hiberbate 验证器 '5.0.1.Final' 而不是需要 Hibernate 验证器版本 4。

于 2015-03-02T07:42:06.153 回答
0

你有没有这样做:

为 RESTEasy 提供一个 ValidatorAdapter

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

@Provider
public class MyValidatorContextResolver implements ContextResolver<ValidatorAdapter> {

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

}
于 2013-06-09T01:07:41.193 回答
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

于 2013-06-19T12:29:51.627 回答