首页 > 解决方案 > 如何从请求中获取原始 JSON 消息并从响应中获取 HTTP 状态码

问题描述

我正在开发一个 Spring Boot 应用程序。作为处理请求的一部分,我们需要存储原始 JSON 请求和 HTTP 响应代码以存储在数据库中。

我们能够在扩展 RequestBodyAdviceAdapter 的类中拦截请求。该类实现了 afterBodyRead 方法来获取请求的正文。不幸的是,无法在此方法中获取原始 JSON 请求。

同样,我们有另一个类实现了 ResponseBodyAdvice 来拦截响应。在 beforeBodyWrite 方法中,响应状态码不可用。

标签: spring-boot

解决方案


您可以编写一个简单的 servlet 过滤器:

@Component
public class JsonFilter implements Filter {

    @Override
    public void doFilter
      ServletRequest request, 
      ServletResponse response, 
      FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;

        // Log JSON request

        chain.doFilter(request, response);

        // Log JSON response and HTTP Status code
    }

    // other methods 
}

在此处阅读有关过滤器和 Spring Boot 的更多信息:https ://www.baeldung.com/spring-boot-add-filter


推荐阅读