Resteasy Beanvalidation未被调用
问题背景
我有一个Resteasy服务,通过Resteasy的SpringContextLoaderListener
使用Spring。 这是基于Resteasy版本3.0-beta-6
。
我想对传入的请求使用beanvalidation,但我无法让Resteasy调用validation器。 它的行为就像没有配置validation一样,只是将方法传递给无效的输入对象。
题
- 如何在Resteasy中启用beanvalidation?
我试过的
我做了以下事情:
- 用
@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条目validation:
org.jboss.resteasy resteasy-hibernatevalidator-provider ${resteasy.version}
resteasy-hibernatevalidator-provider
依赖项resteasy-hibernatevalidator-provider
了HibernateValidatorContextResolver
及其关联的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。