【问题标题】:IBM Websphere 8.5 bean validation issue in JAX-RS resourcesJAX-RS 资源中的 IBM Websphere 8.5 bean 验证问题
【发布时间】:2020-05-16 08:16:33
【问题描述】:

这是我使用的代码示例:

@Stateless
@Path("/rest")
public class MyResouce{
    @POST
    @Path("/test")
    public Response test(@Valid Test t){
        return Response.ok().build();
    }
}

public class Test {
    @Size(max = 3)
    private String val;

    public String getVal() {
        return val;
    }

    public void setVal(String val) {
        this.val = val;
    }
}

当我传递一个无效对象(val 的长度大于 3)时,我预计会出现 ValidationException,但不会发生异常。当我注入验证器并以编程方式进行验证时:

@Path("/rest")
public class MyResouce{

    @Resource
    private Validator validator;

    @POST
    @Path("/test")
    public Response test(@Valid Test t){
        Set<ConstraintViolation<Test>> violations = validator.validate(t); // size = 1, means t object is invalid
        return Response.ok().build();
    }
}

验证结果有 1 个 ConstraintViolation 项,这意味着对象无效,并且看起来注释 @Valid 被忽略。如何以非编程方式验证对象? 这是我的validation.xml 描述符:

<?xml version="1.0" encoding="UTF-8"?>
<validation-config
        xmlns="http://jboss.org/xml/ns/javax/validation/configuration"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration validation-configuration-1.0.xsd">

</validation-config>

Websphere 版本 8.5.5.11,JAX-RS 1.1

【问题讨论】:

    标签: jax-rs ejb bean-validation websphere-8


    【解决方案1】:

    JAX-RS 1.1 不会自动与 Bean 验证集成,因此您需要执行自己的验证(就像您在第二个示例中所做的那样)。

    JAX-RS 2.0(在 WebSphere v9 中可用)或 2.1(在 WebSphere Liberty 中可用)都支持与 bean 验证的自动集成。你可以在this post找到更多信息。

    希望这会有所帮助,安迪

    【讨论】:

    • 谢谢你,安迪。
    猜你喜欢
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多