我使用 Boot 注解来访问请求主体属性,如下所示
@PostMapping
ResponseEntity<UserDto> createUser (@RequestBody UserDto userDto) {
// some coode
return null;
}
我想要做的不是仅仅访问userDto属性,而是记录整个请求主体,因为其他人正在使用发送请求,而它与我的userDto
不匹配
我试过什么?
@PostMapping
ResponseEntity<UserDto> createUser (HttpServletRequest request) {
logger.info("Body: {}", request.getReader().lines().collect(Collectors.toSet()));
return null;
}
这样做很好,但是每次我想记录请求主体时,我必须在@RequestBody UserDto
和HttpServletRequest request
之间切换
有没有什么方法可以让我保留Jackson@RequestBody
的annonation,同时仍然按原样记录请求主体?
3条答案
按热度按时间lsmepo6l1#
信息取自https://www.baeldung.com/spring-http-logging
您可以为此使用Springs CommonsRequestLoggingFilter。您可以通过配置Bean激活它:
过滤器记录调试,因此您需要为类启用调试日志记录。
有关参考,请参见https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/filter/CommonsRequestLoggingFilter.html
ct3nt3jp2#
您可以使用fasterxml中的ObjectMapper
将以下依赖项添加到pom.xml:
将createUser方法更改为:
在您的控制台中结果将是这样的:
wfauudbj3#
解决此任务的一种方法是编写一个Http筛选器,在调用Handler方法之前记录消息。
此Baeldung Article演示了一个记录日志的过滤器。