问题背景
我有一个Resteasy服务,通过Resteasy的SpringContextLoaderListener使用Spring.这是基于Resteasy版本3.0-beta-6.
我想对传入的请求使用bean验证,但我无法让Resteasy调用验证器.它的作用就像没有配置验证,只是将方法传递给无效的输入对象.
题
>如何在Resteasy中启用bean验证?
我试过的
我做了以下事情:
>使用@ValidateRequest注释我的资源类
>使用@Valid注释方法参数
>注释我的输入类的约束.
>添加了对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验证开始工作而没有任何代码更改.
解决方法
你做到了这个:
向RESTEasy提供ValidatorAdapter
RESTEasy将尝试通过类路径中的ContextResolver提供程序获取ValidatorAdapter的实现.我们可以为RESTEasy提供如下实现:
- @Provider
- public class MyValidatorContextResolver implements ContextResolver<ValidatorAdapter> {
- @Override
- public ValidatorAdapter getContext(Class<?> type) {
- return new MyValidator();
- }
- }