千家信息网

SpringBoot打印POST请求原始入参body体的过程

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,本篇内容主要讲解"SpringBoot打印POST请求原始入参body体的过程",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"SpringBoot打印POS
千家信息网最后更新 2025年01月19日SpringBoot打印POST请求原始入参body体的过程

本篇内容主要讲解"SpringBoot打印POST请求原始入参body体的过程",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"SpringBoot打印POST请求原始入参body体的过程"吧!

目录
  • SpringBoot打印POST请求原始入参body体

    • 1、首先定义过滤器配置

    • 2、实现1中的过滤器

  • Post接收不到body里的参数(对象参数)

    • 检查注解

    • 检查实体

    • 检查Content-Type

SpringBoot打印POST请求原始入参body体

1、首先定义过滤器配置

package com.choice.o2o.device.common.config; import com.choice.o2o.device.common.filter.LogFilter;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration; @Configurationpublic class FilterConfig {     @Bean    public FilterRegistrationBean registFilter() {        FilterRegistrationBean registration = new FilterRegistrationBean();        registration.setFilter(new LogFilter());        registration.addUrlPatterns("/*");        registration.setName("LogFilter");        registration.setOrder(1);        return registration;    }}

2、实现1中的过滤器

package com.choice.o2o.three.code.config.log; import lombok.extern.slf4j.Slf4j;import org.springframework.core.Ordered;import org.springframework.web.filter.OncePerRequestFilter;import org.springframework.web.util.ContentCachingRequestWrapper;import org.springframework.web.util.ContentCachingResponseWrapper;import org.springframework.web.util.WebUtils; import javax.servlet.FilterChain;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.Enumeration; @Slf4jpublic class LogParamFilter extends OncePerRequestFilter implements Ordered {    // put filter at the end of all other filters to make sure we are processing after all others    private int order = Ordered.LOWEST_PRECEDENCE - 8;    public static final String SPLIT_STRING_M = "=";    public static final String SPLIT_STRING_DOT = ", ";     @Override    public int getOrder() {        return order;    }     @Override    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,                                    FilterChain filterChain) throws ServletException, IOException {        ContentCachingRequestWrapper wrapperRequest = new ContentCachingRequestWrapper(request);        ContentCachingResponseWrapper wrapperResponse = new ContentCachingResponseWrapper(response);        String urlParams = getRequestParams(request);        filterChain.doFilter(wrapperRequest, wrapperResponse);         String requestBodyStr = getRequestBody(wrapperRequest);        log.info("params[{}] | request body:{}", urlParams, requestBodyStr);         String responseBodyStr = getResponseBody(wrapperResponse);        log.info("response body:{}", responseBodyStr);        wrapperResponse.copyBodyToResponse();    }     /**     * 打印请求参数     *     * @param request     */    private String getRequestBody(ContentCachingRequestWrapper request) {        ContentCachingRequestWrapper wrapper = WebUtils.getNativeRequest(request, ContentCachingRequestWrapper.class);        if (wrapper != null) {            byte[] buf = wrapper.getContentAsByteArray();            if (buf.length > 0) {                String payload;                try {                    payload = new String(buf, 0, buf.length, wrapper.getCharacterEncoding());                } catch (UnsupportedEncodingException e) {                    payload = "[unknown]";                }                return payload.replaceAll("\\n", "");            }        }        return "";    }     /**     * 打印返回参数     *     * @param response     */    private String getResponseBody(ContentCachingResponseWrapper response) {        ContentCachingResponseWrapper wrapper = WebUtils.getNativeResponse(response,                ContentCachingResponseWrapper.class);        if (wrapper != null) {            byte[] buf = wrapper.getContentAsByteArray();            if (buf.length > 0) {                String payload;                try {                    payload = new String(buf, 0, buf.length, wrapper.getCharacterEncoding());                } catch (UnsupportedEncodingException e) {                    payload = "[unknown]";                }                return payload;            }        }        return "";    }     /**     * 获取请求地址上的参数     *     * @param request     * @return     */    public static String getRequestParams(HttpServletRequest request) {        StringBuilder sb = new StringBuilder();        Enumeration enu = request.getParameterNames();        //获取请求参数        while (enu.hasMoreElements()) {            String name = enu.nextElement();            sb.append(name + SPLIT_STRING_M).append(request.getParameter(name));            if (enu.hasMoreElements()) {                sb.append(SPLIT_STRING_DOT);            }        }        return sb.toString();    }}

Post接收不到body里的参数(对象参数)

检查注解

  • @ResponseBody

  • @RequestBody

检查实体

接收实体类,set、get方法是否正确

检查Content-Type

是否是application/json

到此,相信大家对"SpringBoot打印POST请求原始入参body体的过程"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0