我正在为我的Spring引导REST API编写一个类,通过扩展ResponseBodyAdvice来记录响应。因为我能够通过重写beforeBodyWrite方法来记录响应主体。但是在同一方法中,ServerHttpResponse参数没有给出HTTP响应状态。以下是我的代码片段
@ControllerAdvice
@Slf4j
public class ResponseBodyInterceptor implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
return true;
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType,
MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType,
ServerHttpRequest request, ServerHttpResponse response) {
log.info("response code is {}", ((ServletServerHttpResponse) response).getServletResponse().getStatus());
log.info("response headers are {}", ((ServletServerHttpResponse) response).getServletResponse().getHeaderNames());
return body;
}
正如你所看到的,我正在尝试记录响应代码和响应头,但是这些日志都是空值。
1条答案
按热度按时间4c8rllxm1#
我尝试复制您的问题,状态代码记录良好,标题返回为空。
使用
response.getHeaders()
而不是((ServletServerHttpResponse) response).getServletResponse().getHeaderNames()
将记录响应标头及其值:示例日志:
希望能有所帮助,或者你能提供更多的信息,以便进一步探讨这个问题。