java - Resteasy Bean 验证未再次被调用

标签 java jax-rs resteasy bean-validation

我的问题类似于Resteasy Bean Validation Not Being Invoked 。但那里的解决方案不起作用。

我在我的 pom.xml 中使用 Resteasy 3.0.9.Final 和resteasy-validator-provider-11。我正在使用自定义 Jetty 类启动整个过程。

奇怪的是,验证在 @PathParams 上工作正常,但在 bean 上却不行。

@POST
@Path("/foo/{myParam}")
public Message post(MyBean myBean, @PathParam("myParam") @Size(min=5) String myParam) {
    return new Message("bean:" + myBean.toString());
}

public static class MyBean {

    @NotNull
    public String myStr;

    @Max(value = 3)
    public int myInt;

    public String toString() {
        return myStr + myInt;
    }
}

在这种情况下,myParam 上的 @Size 约束工作正常。但是 MyBean 中的 @NotNull 和 @Max 约束没有被调用。

我是否在某处缺少注释?

这里还有一条线索。我的日志包括以下条目:

2014-12-30 12:16:56 org.hibernate.validator.internal.util.Version 6446 INFO  HV000001: Hibernate Validator 5.0.1.Final
2014-12-30 12:16:56 org.jboss.resteasy.plugins.validation.AbstractValidatorContextResolver 6477 INFO  Unable to find CDI supporting ValidatorFactory. Using default ValidatorFactory

最佳答案

我相信,但不是 100% 确定,问题是您在 MyBean 参数上缺少 @Valid 。我还建议将其设为一个单独的类,而不是静态类。

根据规范,如果对象是复杂对象,则对方法的验证约束需要将参数注释为 @Valid 以确保约束是级联的。

关于java - Resteasy Bean 验证未再次被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27710571/

相关文章:

java - 如何让 Spring Restful 服务与 SSL 一起工作?

java - Jersey JUnit 测试 : @WebListener ServletContextListener not invoked

java - 在 RESTEasy 中使用 POST 请求

java - Tomcat 7.0.30 不适用于 Resteasy 2.3.4

java - 在另一个 EJB 中调用一个 EJB 是否健康?

java - 从 ASyncResult 获取状态

java - 为什么输出每次都不同而不是同步块(synchronized block)

java - 上下文注入(inject)的 SecurityContext 为 null

java - Jersey JAX-RS 实例注入(inject)

java - 如何将String参数发送到resteasy并转换为json?