gpt4 book ai didi

spring - 在 Spring Boot REST 服务中记录所有请求和响应

转载 作者:行者123 更新时间:2023-11-28 23:56:17 26 4
gpt4 key购买 nike

我使用 Spring boot 并有一些 REST Controller 。我想记录所有请求和响应。我使用外部 tomacat,没有嵌入!我写拦截器:

@Component
@Log4j2
public class LoggingWebMvcInterceptor implements HandlerInterceptor {

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
final ContentCachingRequestWrapper wrapper = new ContentCachingRequestWrapper(request);
log.debug("REQ!!!! {}", wrapper.getReader().lines().collect(Collectors.joining(System.lineSeparator())));
return true;
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//log.debug("Response: {}", response);
}

并添加他的:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

private final LoggingWebMvcInterceptor loggingWebMvcInterceptor;

@Autowired
public WebMvcConfig(LoggingWebMvcInterceptor loggingWebMvcInterceptor) {
this.loggingWebMvcInterceptor = loggingWebMvcInterceptor;
}

@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loggingWebMvcInterceptor);
}
}

但它不起作用!

当我尝试 POST 请求时,他的日志记录,但我有错误:"Required request body is missing

我做错了什么?我为请求创建了一个包装器!我需要完整记录所有请求(POST、GET、DELETE、PUT)以及标题和正文以及所有响应。我怎样才能做到这一点?请提供任何帮助。

最佳答案

虽然您的问题并不是每个人都能很好地理解(没有很好地记录——例如,它的来源没有显示 Required request body is missing.)但无论如何。

出于日志记录的目的,我不会使用 Interceptor,因为我觉得这工作量太大。相反,您可以很好地创建一个切入点,切入点定义为围绕使用各种 Spring Controller 注释进行注释的方法。 ProceedingJoinPoint#proceed 方法有效地允许您获取响应对象,并且请求本身包含有关参数、IP、方法等所需的所有信息。

有了它,您就可以在其中注入(inject)一个 HttpServletRequest,从而最终拥有执行任何日志记录事件的所有正确工具。

如果您想多次缓存和重新读取 HttpServletRequest 的主体,添加缓存包装器确实是非常正确的,但我会避免将其添加到 Interceptor/Aspect本身。

关于spring - 在 Spring Boot REST 服务中记录所有请求和响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50951584/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com