问题描述:
使用JSON接收前端参数时, SpringMVC默认输出日志如下:
o.s.web.servlet.DispatcherServlet : POST "/example_project/app/login", parameters={}
parameters={}无法打印出JSON消息内容。
如果自己实现参数打印, 则需要从reqeust.getInputStream中获取JSON内容, 但是由于流只能读取一次, 所以会导致后续SpringMVC解析参数异常。
网上找到一种比较解决方法: 用HttpRequestWrapper重新封装Reqeust, 使打印日志后SpringMVC能正常解析HttpReqeust。这种方法比较麻烦, 这里不去研究
这里主要说说Spring提供的较好的解决方案:
可以通过自定义RequestBodyAdvisor、ResponseBodyAdvisor来实现日志输出。
RequestBodyAdvisor可以获取到解析后的Controller方法参数对象。
ResponseBodyAdvisor可以获取到Controller方法返回值对象。
然后将他们注册到requestMappingHandlerAdapter:
// 继承WebMvcConfigurationSupport, 重写该方法
@Override
@Bean
public RequestMappingHandlerAdapter requestMappingHandlerAdapter() {
RequestMappingHandlerAdapter adapter = super.requestMap