我有Resteasy服务,通过Resteasy的SpringContextLoaderListener
使用Spring。这是基于Resteasy版本3.0-beta-6
。
我想对传入的请求使用bean验证,但我无法让Resteasy调用验证器。它的作用就像没有配置验证,只是将方法传递给无效的输入对象。
我做了以下事情:
@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.
}
}
@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
}
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-hibernatevalidator-provider</artifactId>
<version>${resteasy.version}</version>
</dependency>
resteasy-hibernatevalidator-provider
依赖项会带来HibernateValidatorContextResolver
及其关联的HibernateValidatorAdapter
。
我将我的pom中的Resteasy版本恢复为2.3.5.Final
,并且bean验证在没有任何代码更改的情况下开始工作。
答案 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。