我使用的是DWR 3.0.0-rc2和Spring 3.1.1.RELEASE。我想知道是否有可能验证我的@DataTransferObject输入对象使用Spring风格的"@Valid"(javax. validate .valid)注释。我的具体问题是,如果这是可能的,我设置我的远程呼叫像这样…
@RemoteMethod
@Override
public String myRemoteMethod(@Valid final MyDto request)
{
我如何测试,看看输入对象(请求)是有效的,然后抛出一组相应的错误返回给客户端?谢谢,- Dave
这看起来像是一个应用AOP的好例子。一种方法是创建一个@Before
方面,它检查被调用的参数,看看它们是否用@Valid
注释了,如果是,则触发对该参数的验证并处理结果。
这个方面的代码看起来像这样:
@Aspect
public class ValidatingAspect {
Validator validator;
public ValidatingAspect() {
Configuration<?> configuration = Validation.byDefaultProvider().configure();
ValidatorFactory factory = configuration.buildValidatorFactory();
this.validator = factory.getValidator();
}
@Before("execution(* com.yourpackage..*.*(..))")
public void validateBefore(JoinPoint jp) throws Throwable {
Object[] args = jp.getArgs();
MethodSignature ms = (MethodSignature) jp.getSignature();
Method m = ms.getMethod();
Annotation[][] parameterAnnotations = m.getParameterAnnotations();
for (int i = 0; i < parameterAnnotations.length; i++) {
Annotation[] annotations = parameterAnnotations[i];
for (Annotation annotation : annotations) {
if (annotation.annotationType() == Valid.class) {
Set<ConstraintViolation<T>> constraintViolations = validator.validate(jp.getArgs()[i]);
... handle validation results ...
}
}
}
}
}