本文介绍了在Spring MVC框架下如何有效地输出请求体(@RequestBody)和响应体(@ResponseBody)的日志信息,帮助开发者更便捷地进行调试与问题排查。
Spring MVC框架提供了强大的日志记录功能。本段落将介绍如何使用RequestBodyAdvisor和ResponseBodyAdvisor来实现对@RequestBody和@Response的日志输出。
首先需要了解Spring MVC中的请求和响应处理流程:用户的请求先由DispatcherServlet处理,然后分配给对应的Controller进行处理。默认情况下,Spring MVC不会自动打印JSON格式的请求参数或响应结果日志。
为了实现在特定方法中记录这些信息的功能,我们需要自定义RequestBodyAdvisor和ResponseBodyAdvisor类,并在WebMvcConfigurer接口实现类(如继承自WebMvcConfigurationSupport)的方法requestMappingHandlerAdapter()里注册它们:
```java
@Override
@Bean
public RequestMappingHandlerAdapter requestMappingHandlerAdapter() {
RequestMappingHandlerAdapter adapter = super.requestMappingHandlerAdapter();
adapter.setRequestBodyAdvice(Lists.newArrayList(new CustomerRequestBodyAdvisor()));
adapter.setResponseBodyAdvice(Lists.newArrayList(new CustomerResponseBodyAdvisor()));
return adapter;
}
```
接下来,实现CustomerRequestBodyAdvisor和CustomerResponseBodyAdvisor类:
```java
public class CustomerRequestBodyAdvisor extends RequestBodyAdviceAdapter {
private static final Logger logger = LoggerFactory.getLogger(CustomerRequestBodyAdapter.class);
@Override
public boolean supports(MethodParameter methodParameter, Type targetType, Class extends HttpMessageConverter>> converterType) {
return methodParameter.getParameterAnnotation(RequestBody.class) != null;
}
@Override
public Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class extends HttpMessageConverter>> converterType) {
String jsonBody = JSON.toJSONString(body);
logger.info(Request Body: {}, jsonBody);
return body;
}
}
```
```java
public class CustomerResponseBodyAdvisor implements ResponseBodyAdvice