欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot打印POST請(qǐng)求原始入?yún)ody體方式

 更新時(shí)間:2021年09月11日 17:13:16   作者:圍子先生  
這篇文章主要介紹了SpringBoot打印POST請(qǐng)求原始入?yún)ody體方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

SpringBoot打印POST請(qǐng)求原始入?yún)ody體

1、首先定義過(guò)濾器配置

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; 
@Configuration
public 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、實(shí)現(xiàn)1中的過(guò)濾器

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;
 
@Slf4j
public 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();
    }
 
    /**
     * 打印請(qǐng)求參數(shù)
     *
     * @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 "";
    }
 
    /**
     * 打印返回參數(shù)
     *
     * @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 "";
    }
 
    /**
     * 獲取請(qǐng)求地址上的參數(shù)
     *
     * @param request
     * @return
     */
    public static String getRequestParams(HttpServletRequest request) {
        StringBuilder sb = new StringBuilder();
        Enumeration<String> enu = request.getParameterNames();
        //獲取請(qǐng)求參數(shù)
        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里的參數(shù)(對(duì)象參數(shù))

檢查注解

  • @ResponseBody
  • @RequestBody

檢查實(shí)體

接收實(shí)體類(lèi),set、get方法是否正確

檢查Content-Type

是否是application/json

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring?Service功能作用詳細(xì)講解

    Spring?Service功能作用詳細(xì)講解

    service層測(cè)試較簡(jiǎn)單,目前大多數(shù)測(cè)試主要是針對(duì)public方法進(jìn)行的。依據(jù)測(cè)試方法劃分,可以分為兩種:基于mock的隔離測(cè)試和基于dbunit的普通測(cè)試
    2022-12-12
  • Java經(jīng)典面試題匯總:多線程

    Java經(jīng)典面試題匯總:多線程

    本篇總結(jié)的是Java多線程相關(guān)的面試題,后續(xù)會(huì)持續(xù)更新,希望我的分享可以幫助到正在備戰(zhàn)面試的實(shí)習(xí)生或者已經(jīng)工作的同行,如果發(fā)現(xiàn)錯(cuò)誤還望大家多多包涵,不吝賜教,謝謝
    2021-07-07
  • Spring Boot與Kotlin 整合全文搜索引擎Elasticsearch的示例代碼

    Spring Boot與Kotlin 整合全文搜索引擎Elasticsearch的示例代碼

    本篇文章主要介紹了Spring Boot與Kotlin 整合全文搜索引擎Elasticsearch的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 工廠模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    工廠模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了工廠模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理的相關(guān)資料,需要的朋友可以參考下
    2017-08-08
  • SpringBoot @JsonDeserialize自定義Json序列化方式

    SpringBoot @JsonDeserialize自定義Json序列化方式

    這篇文章主要介紹了SpringBoot @JsonDeserialize自定義Json序列化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 簡(jiǎn)單了解Java類(lèi)成員初始化順序

    簡(jiǎn)單了解Java類(lèi)成員初始化順序

    這篇文章主要介紹了簡(jiǎn)單了解Java類(lèi)成員初始化順序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 詳解Netty編碼器和解碼器

    詳解Netty編碼器和解碼器

    很多小伙伴對(duì)Netty編解碼器這方面不是很了解,今天這篇文章給大家詳細(xì)介紹了Netty編碼器和解碼器的相關(guān)知識(shí),需要的朋友可以參考下
    2021-06-06
  • 詳解Mybatis核心配置文件

    詳解Mybatis核心配置文件

    今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著Mybatis核心配置文件展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java中Arrays數(shù)組工具類(lèi)的基本使用詳解

    Java中Arrays數(shù)組工具類(lèi)的基本使用詳解

    Arrays類(lèi)中的方法都是static修飾的靜態(tài)方法,在使用的時(shí)候可以直接使用類(lèi)名進(jìn)行調(diào)用,而"不用"使用對(duì)象來(lái)調(diào)用(注意:是"不用"?而不是?"不能"),這篇文章主要給大家介紹了關(guān)于Java中Arrays數(shù)組工具類(lèi)的基本使用,需要的朋友可以參考下
    2021-12-12
  • SpringCloud 服務(wù)負(fù)載均衡和調(diào)用 Ribbon、OpenFeign的方法

    SpringCloud 服務(wù)負(fù)載均衡和調(diào)用 Ribbon、OpenFeign的方法

    這篇文章主要介紹了SpringCloud 服務(wù)負(fù)載均衡和調(diào)用 Ribbon、OpenFeign的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09

最新評(píng)論