Как получить тело ответа процесса синхронизации, когда в Spring Boot есть процессоры синхронизации и асинхронности

#java #spring #spring-boot #servlets #httpresponse

Вопрос:

Я хочу перехватить и получить тело ответа для обработки синхронизации. Если я попробую это сделать, мои контроллеры — как с процессорами синхронизации, так и с асинхронными процессорами-будут работать правильно, но я ничего не получу от ответа синхронизации в предложении else

 @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper((HttpServletResponse) response);
    chain.doFilter(request, response);

    if (request.isAsyncStarted()) {
        //Some code
    } else {
        byte[] responseArray = responseWrapper.getContentAsByteArray();
        String responseString = new String(responseArray, responseWrapper.getCharacterEncoding());
        System.out.println("response = "   responseString);
        responseWrapper.copyBodyToResponse();
    }
    
    ThreadContext.clearMap();
}
 

Если я попытаюсь это сделать, я получу текст ответа в предложении else, но асинхронный процесс не освобождает http-поток

 @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper((HttpServletResponse) response);

chain.doFilter(request, responseWrapper);

if (request.isAsyncStarted()) {
//Some code
} else {
byte[] responseArray = responseWrapper.getContentAsByteArray();
String responseString = new String(responseArray, responseWrapper.getCharacterEncoding());
System.out.println("response = "   responseString);
responseWrapper.copyBodyToResponse();
}
ThreadContext.clearMap();
}