【问题标题】:How do I validate my DWR @RemoteMethod input objects?如何验证我的 DWR @RemoteMethod 输入对象?
【发布时间】:2014-03-12 19:02:21
【问题描述】:

我正在使用 DWR 3.0.0-rc2 和 Spring 3.1.1.RELEASE。我想知道是否可以使用 Spring 风格的“@Valid”(javax.validation.Valid)注解来验证我的@DataTransferObject 输入对象。我的具体问题是,如果这是可能的,我会像这样设置我的远程呼叫......

@RemoteMethod
@Override
public String myRemoteMethod(@Valid final MyDto request)
{

如何测试输入对象(请求)是否有效,然后将一组相应的错误返回给客户端? 谢谢, - 戴夫

【问题讨论】:

    标签: spring validation dwr data-transfer-objects


    【解决方案1】:

    这看起来是应用一些 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 ...
                    }
                }
            }
        } 
    }
    

    【讨论】:

    • 嗨,这看起来是一种很有前途的方法。如何将方面应用于相关方法?
    • 这可以通过&lt;aop:aspectj-autoproxy /&gt;激活,看看这个例子:mkyong.com/spring3/spring-aop-aspectj-annotation-example
    • 谢谢。字段“验证器”是您创建的类吗?它会自动处理我的请求对象中标记为“@NotNull”(javax.validation.constraints.NotNull)的字段,还是我必须创建自定义逻辑来验证这些类型的注释?
    • Validator 来自 BeanValidation jar,它会在你的 Pojo 类中检测像 @NotNull 这样的注解并验证它们
    猜你喜欢
    • 2021-12-13
    • 2021-07-18
    • 2011-06-09
    • 2021-04-15
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    相关资源
    最近更新 更多