如何使用restcontroller在spring restful webservice中记录传入的json请求?

sai*_*sai 3 java rest spring web-services spring-restcontroller

我想记录所有传入的请求,这些请求将是json格式.我使用spring @RestController和@RequestBody注释将传入的json内容绑定到java对象.但是我想将这些请求记录到logger文件.我搜索过用于objectmapper和jacksonbinding.

@RestController
public class restClassName{

@RequestMapping(value={"/uri"})
public ObjectResponse functionRestName(@RequestBody ObjectRequest or){
  String jsonInString = mapper.writeValueAsString(staff);//Redundant stuff as the request json is already read by MappingJackson2HttpMessageConverter
  logger.info("request::"+jsonInString)
  return instance;
}
}
Run Code Online (Sandbox Code Playgroud)

但这似乎是一种非常重要的做法.由于MappingJackson2HttpMessageConverter已经读取了httprequest以将json请求转换为java对象.我只需要在MappingJackson2HttpMessageConverter将请求json转换为java对象之前记录json.

Avi*_*ash 7

实现它的最简单方法是使用CommonsRequestLoggingFilter下面伪代码中描述的.

@Bean
public CommonsRequestLoggingFilter requestLoggingFilter() {
    CommonsRequestLoggingFilter crlf = new CommonsRequestLoggingFilter();
    crlf.setIncludeClientInfo(true);
    crlf.setIncludeQueryString(true);
    crlf.setIncludePayload(true);
    return crlf;
}
Run Code Online (Sandbox Code Playgroud)

然后在application.properties文件中添加以下行.

logging.level.org.springframework.web.filter.CommonsRequestLoggingFilter=DEBUG
Run Code Online (Sandbox Code Playgroud)

这将记录所有请求,请按照CommonsRequestLoggingFilter api doc的链接进行更多自定义.