0

DWR 3.0.0-rc2 と Spring 3.1.1.RELEASE を使用しています。Spring スタイルの「@Valid」(javax.validation.Valid) アノテーションを使用して @DataTransferObject 入力オブジェクトを検証できるかどうか疑問に思っていました。私の具体的な質問は、これが可能で、リモート通話をそのようにセットアップするかどうかです...</p>

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

入力オブジェクト (リクエスト) が有効かどうかをテストしてから、対応する一連のエラーをクライアントに返すにはどうすればよいですか? ありがとう - デイブ

4

1 に答える 1

1

これは、AOP を適用するのに適したケースのようです。1 つの方法は@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 ...
                }
            }
        }
    } 
}
于 2014-03-17T15:27:30.653 に答える