【发布时间】:2014-03-20 08:26:36
【问题描述】:
我没有找到问题“如何处理方法验证异常?”的任何答案,该问题由 Bean Validation 1.1 自动抛出。
我有以下环境:
Glassfish 4
hibernate-validator-5.0.1.Final.jar (in ear)
现在我尝试实现方法参数的自动验证:
@Local
@ValidateOnExecution(type = ExecutableType.ALL)
public interface SomeServiceLocal {
String someMethod(@Size(max = 1) String value);
}
执行中:
@Stateless
public class OtherBean implements OtherBeanLocal {
@EJB
private SomeServiceLocal someService;
@Override
public String otherMethod() {
return someService.someMethod("abc");
}
}
}
现在,当我调用 otherMethod 时:
javax.ejb.EJBTransactionRolledbackException
at com.sun.ejb.containers.BaseContainer.mapLocal3xException(BaseContainer.java:2279)
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2060)
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1979)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:220)
紧随其后
Caused by: javax.validation.ConstraintViolationException: 1 constraint violation(s) occurred during method validation
...
Constraint violations:
(1) Kind: PARAMETER
parameter index: 3
message: size must be between 0 and 1
处理违规异常的最佳做法是什么?
【问题讨论】:
-
我认为这取决于您的用例?例如,如果输入来自用户通过 UI,您可能希望处理 ConstraintViolationException 中包含的 ConstraintViolation 并将信息传递给用户。或者,如果您正在进行批处理,您将记录异常并标记记录以供检查等