既存のspring-mvc
アプリケーションに非同期エンドポイントを追加しました。
@RestController
public class MyController {
@PostMapping("/")
public Mono<String> post(Object body) {
return Mono.just("test");
//webClient.retrieve().bodyToMono(String.class);
}
}
リクエスト本文のペイロードをログに記録するグローバル インターセプター/フィルターを作成したいと考えています。しかし、どうすればアクセスできますか?
を追加しようとしましたHandlerInterceptorAdapter
が、ペイロードは常に空です:
static class LoggingInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
ContentCachingRequestWrapper wrapper = new ContentCachingRequestWrapper(request);
byte[] buf = wrapper.getContentAsByteArray();
System.out.println(buf);
System.out.println(buf.length);
return true;
}
}
ペイロードがまだリクエストに含まれていないか、すでに読み取られている可能性があります。では、この非同期のケースでどのように本体にアクセスできますか?