JAX-RS 资源中的 IBM Websphere 8.5 bean 验证问题
IBM Websphere 8.5 bean validation issue in JAX-RS resources
这是我使用的代码示例:
@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 1.1 不会自动与 Bean 验证集成,因此您需要执行自己的验证(就像您在第二个示例中所做的那样)。
JAX-RS 2.0(在 WebSphere v9 中可用)或 2.1(在 WebSphere Liberty 中可用)都支持与 bean 验证的自动集成。您可以在 this post.
上找到更多信息
安迪,希望这对你有所帮助
这是我使用的代码示例:
@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 1.1 不会自动与 Bean 验证集成,因此您需要执行自己的验证(就像您在第二个示例中所做的那样)。
JAX-RS 2.0(在 WebSphere v9 中可用)或 2.1(在 WebSphere Liberty 中可用)都支持与 bean 验证的自动集成。您可以在 this post.
上找到更多信息安迪,希望这对你有所帮助