Resteasy Bean验证未被调用

gre*_*ker 7 java spring resteasy bean-validation

问题背景

我有一个Resteasy服务,通过Resteasy使用Spring 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.
    }
}
Run Code Online (Sandbox Code Playgroud)

用户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
}
Run Code Online (Sandbox Code Playgroud)

POM条目验证:

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-hibernatevalidator-provider</artifactId>
        <version>${resteasy.version}</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

resteasy-hibernatevalidator-provider依赖性带来的HibernateValidatorContextResolver及其相关HibernateValidatorAdapter.


更新(2013年6月18日):

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

Jun*_*san 0

你有没有这样做过:

为 RESTEasy 提供 ValidatorAdapter

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

@Provider
public class MyValidatorContextResolver implements ContextResolver<ValidatorAdapter> {

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

}
Run Code Online (Sandbox Code Playgroud)