EJB 方法参数是否在 Java EE 容器中自动验证?
Are EJB method parameters validated automatically in a Java EE container?
我是 Java Bean Validation 的新手,所以我想了解它是如何工作的。
据我所知,在 Java EE 容器中,持久性提供程序使用 JPA 负责实体的验证,因此无需使用 Validator
.
以编程方式进行验证
EJB 方法参数也会自动验证吗?
如果我有一个由 EJB 实现的 @Local
接口:
@Local
public interface ExampleLocal
{
void doSomething(@NotNull String param);
}
然后我将 null
传递给上述方法:
public class Foo
{
@EJB
private ExampleLocal example;
public void callDoSomething()
{
example.doSomething(null);
}
}
EJB 是否抛出 EJBException
?
似乎没有自动验证 EJB 方法参数。
我在 TomEE 中进行了测试,我不得不使用 Interceptor 来验证它们
@Interceptor
@Validable
public class ValidationInterceptor
{
@Resource
private Validator validator;
@AroundInvoke
private Object validate(InvocationContext ic) throws Exception
{
ExecutableValidator exVal = validator.forExecutables();
Set<ConstraintViolation<Object>> violations = exVal.validateParameters(ic.getTarget(),ic.getMethod(),ic.getParameters());
if (!violations.isEmpty())
throw new ConstraintViolationException(violations);
return ic.proceed();
}
}
我是 Java Bean Validation 的新手,所以我想了解它是如何工作的。
据我所知,在 Java EE 容器中,持久性提供程序使用 JPA 负责实体的验证,因此无需使用 Validator
.
以编程方式进行验证
EJB 方法参数也会自动验证吗?
如果我有一个由 EJB 实现的 @Local
接口:
@Local
public interface ExampleLocal
{
void doSomething(@NotNull String param);
}
然后我将 null
传递给上述方法:
public class Foo
{
@EJB
private ExampleLocal example;
public void callDoSomething()
{
example.doSomething(null);
}
}
EJB 是否抛出 EJBException
?
似乎没有自动验证 EJB 方法参数。
我在 TomEE 中进行了测试,我不得不使用 Interceptor 来验证它们
@Interceptor
@Validable
public class ValidationInterceptor
{
@Resource
private Validator validator;
@AroundInvoke
private Object validate(InvocationContext ic) throws Exception
{
ExecutableValidator exVal = validator.forExecutables();
Set<ConstraintViolation<Object>> violations = exVal.validateParameters(ic.getTarget(),ic.getMethod(),ic.getParameters());
if (!violations.isEmpty())
throw new ConstraintViolationException(violations);
return ic.proceed();
}
}