#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();
}