11

このアプリケーションでは、リクエストとレスポンスに JSON を使用しています。コントローラーのメソッドには @RequestBody() のアノテーションが付けられます。返されるオブジェクト (TransferResponse など)。@ResponseBody からこのオブジェクトを取得したいと思います。インターセプターの postHandle メソッドをセットアップしました。

@Override
    public void postHandle(HttpServletRequest request,
                           HttpServletResponse response,
                           Object handler,
                           ModelAndView modelAndView) throws java.lang.Exception

    {
....

}

では、この postHandle メソッドで JSON を取得するにはどうすればよいでしょうか?

よろしくお願いします。

4

4 に答える 4

6

Pavel Horalが既に述べたように、メソッドpostHandle()が呼び出されると、応答本文オブジェクトは既に JSON に変換され、応答に書き込まれます。コントローラーの応答本文オブジェクトをインターセプトするために、独自のカスタム アノテーションとアスペクトを記述してみることができます。

// custom annotation
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation {
}

// aspect
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class MyCustomAnnotationAspect {
    @Around(value = "@annotation(org.package.MyCustomAnnotation)", argNames = "pjp")
    public Object aroundAdvice(final ProceedingJoinPoint pjp) {
        // this is your response body
        Object responseBody = pjp.proceed();
        return responseBody;
    }
}

を使用して AspectJ アスペクトのサポートを有効にします@EnableAspectJAutoProxy

于 2013-06-24T18:04:06.250 に答える
0

Pavel が言ったように、おそらくこの方法では応答 JSON に到達できません。最善の策は、応答をクライアントに書き込む前に応答を確認するFilterを実装することだと思います。出発点として、OncePerRequestFilterを見てください。

于 2013-06-24T18:02:43.140 に答える