简体   繁体   English

如何记录 REST 请求和响应 JSON 对象

[英]How to log REST request and response JSON objects

I want to ask you if it is possible to add log system to this CORS sample without Spring (just Java 'standard' and Jersey libraries).我想问您是否可以在没有 Spring 的情况下将日志系统添加到此 CORS 示例(仅 Java '标准'和 Z3EFBF6CDA26E0Z28 库)。

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet Filter implementation class CORSFilter
 */
// Enable it for Servlet 3.x implementations
/* @ WebFilter(asyncSupported = true, urlPatterns = { "/*" }) */
public class CORSFilter implements Filter {

    /**
     * Default constructor.
     */
    public CORSFilter() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @see Filter#destroy()
     */
    public void destroy() {
        // TODO Auto-generated method stub
    }

    /**
     * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
     */
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)
            throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) servletRequest;
        System.out.println("CORSFilter HTTP Request: " + request.getMethod());

        // Authorize (allow) all domains to consume the content
        ((HttpServletResponse) servletResponse).addHeader("Access-Control-Allow-Origin", "*");
        ((HttpServletResponse) servletResponse).addHeader("Access-Control-Allow-Methods","GET, OPTIONS, HEAD, PUT, POST");

        HttpServletResponse resp = (HttpServletResponse) servletResponse;

        // For HTTP OPTIONS verb/method reply with ACCEPTED status code -- per CORS handshake
        if (request.getMethod().equals("OPTIONS")) {
            resp.setStatus(HttpServletResponse.SC_ACCEPTED);
            return;
        }





**//String jsonRequestObject = ....;**

        // pass the request along the filter chain
        chain.doFilter(request, servletResponse);

**//String jsonResponseObject = ....;**
    }

    /**
     * @see Filter#init(FilterConfig)
     */
    public void init(FilterConfig fConfig) throws ServletException {
        // TODO Auto-generated method stub
    }

}

If you are using jersey implementation, then why you are implement Filter interface go with the recommended jersey filter 'ContainerRequestFilter' and 'ContainerResponseFilter'如果您使用的是 jersey 实现,那么为什么要使用推荐的 jersey 过滤器“ContainerRequestFilter”和“ContainerResponseFilter”来实现过滤器接口 go

https://javapapers.com/web-service/intercept-jax-rs-request-with-jerseycontainerrequestfilter/ https://javapapers.com/web-service/intercept-jax-rs-request-with-jerseycontainerrequestfilter/

Try to use below code尝试使用下面的代码

public class LogHttpInterceptor implements ClientHttpRequestInterceptor {

    final static Logger log = LoggerFactory.getLogger(LogHttpInterceptor.class);

    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
        traceRequest(request, body);
        ClientHttpResponse response = execution.execute(request, body);
        traceResponse(response);
        return response;
    }

    private void traceRequest(HttpRequest request, byte[] body) throws IOException {
        log.trace("request begin===========================================================================");
        log.trace("URI         : {}", request.getURI());
        log.trace("Method      : {}", request.getMethod());
        log.trace("Headers     : {}", request.getHeaders() );
        log.trace("Request body: {}", new String(body, "UTF-8"));
        log.trace("request end=============================================================================");
    }

    private void traceResponse(ClientHttpResponse response) throws IOException {
        StringBuilder inputStringBuilder = new StringBuilder();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(response.getBody(), "UTF-8"));
        String line = bufferedReader.readLine();
        while (line != null) {
            inputStringBuilder.append(line);
            inputStringBuilder.append('\n');
            line = bufferedReader.readLine();
        }
        log.trace("response begin==========================================================================");
        log.trace("Status code  : {}", response.getStatusCode());
        log.trace("Status text  : {}", response.getStatusText());
        log.trace("Headers      : {}", response.getHeaders());
        log.trace("Response body: {}", inputStringBuilder.toString());
        log.trace("response end===========================================================================");
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM