最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)文章

  • Java線(xiàn)程池的幾種實(shí)現(xiàn)方法和區(qū)別介紹

    Java線(xiàn)程池的幾種實(shí)現(xiàn)方法和區(qū)別介紹

    下面小編就為大家?guī)?lái)一篇Java線(xiàn)程池的幾種實(shí)現(xiàn)方法和區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧,祝大家游戲愉快哦
    2016-05-05
  • Java Web實(shí)現(xiàn)session過(guò)期后自動(dòng)跳轉(zhuǎn)到登陸頁(yè)功能【基于過(guò)濾器】

    Java Web實(shí)現(xiàn)session過(guò)期后自動(dòng)跳轉(zhuǎn)到登陸頁(yè)功能【基于過(guò)濾器】

    這篇文章主要介紹了Java Web實(shí)現(xiàn)session過(guò)期后自動(dòng)跳轉(zhuǎn)到登陸頁(yè)功能,涉及java過(guò)濾器針對(duì)session的判斷與跳轉(zhuǎn)相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • Java簡(jiǎn)單實(shí)現(xiàn)UDP和TCP的示例

    Java簡(jiǎn)單實(shí)現(xiàn)UDP和TCP的示例

    下面小編就為大家?guī)?lái)一篇Java簡(jiǎn)單實(shí)現(xiàn)UDP和TCP的示例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • java使用泛型實(shí)現(xiàn)棧結(jié)構(gòu)示例分享

    java使用泛型實(shí)現(xiàn)棧結(jié)構(gòu)示例分享

    泛型是Java SE5.0的重要特性,使用泛型編程可以使代碼獲得最大的重用。由于在使用泛型時(shí)要指明泛型的具體類(lèi)型,這樣就避免了類(lèi)型轉(zhuǎn)換。本實(shí)例將使用泛型來(lái)實(shí)現(xiàn)一個(gè)棧結(jié)構(gòu),并對(duì)其進(jìn)行測(cè)試
    2014-03-03
  • Java內(nèi)部類(lèi)深入解析

    Java內(nèi)部類(lèi)深入解析

    這篇文章主要介紹了Java內(nèi)部類(lèi)深入解析,在java中,我們被允許在編寫(xiě)一個(gè)類(lèi)(外部類(lèi)OuterClass)時(shí),在其內(nèi)部再嵌套一個(gè)類(lèi)(嵌套類(lèi)NestedClass),java將嵌套類(lèi)分為兩種,非靜態(tài)內(nèi)部類(lèi)(簡(jiǎn)稱(chēng)內(nèi)部類(lèi))和 靜態(tài)內(nèi)部,需要的朋友可以參考下
    2023-12-12
  • springboot tomcat最大線(xiàn)程數(shù)與最大連接數(shù)解析

    springboot tomcat最大線(xiàn)程數(shù)與最大連接數(shù)解析

    這篇文章主要介紹了springboot tomcat最大線(xiàn)程數(shù)與最大連接數(shù)解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • spring 中事務(wù)注解@Transactional與trycatch的使用

    spring 中事務(wù)注解@Transactional與trycatch的使用

    這篇文章主要介紹了spring 中事務(wù)注解@Transactional與trycatch的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java編程Reference核心原理示例源碼分析

    java編程Reference核心原理示例源碼分析

    這篇文章主要為大家介紹了java編程Reference的核心原理以及示例源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-01-01
  • 一文帶你看懂Android動(dòng)畫(huà)的實(shí)現(xiàn)原理

    一文帶你看懂Android動(dòng)畫(huà)的實(shí)現(xiàn)原理

    動(dòng)畫(huà)是 Android 應(yīng)用程序中重要的交互特性,ndroid 提供了多種動(dòng)畫(huà)效果,包括平移、縮放、旋轉(zhuǎn)和透明度等,它們可以通過(guò)代碼或 XML 來(lái)實(shí)現(xiàn),本文將介紹 Android 動(dòng)畫(huà)的原理和實(shí)現(xiàn)方法,并提供一些示例,需要的朋友可以參考下
    2023-07-07
  • Java中類(lèi)與對(duì)象的相關(guān)知識(shí)點(diǎn)總結(jié)

    Java中類(lèi)與對(duì)象的相關(guān)知識(shí)點(diǎn)總結(jié)

    對(duì)象是類(lèi)實(shí)例化出來(lái)的,對(duì)象中含有類(lèi)的屬性,類(lèi)是對(duì)象的抽象,下面這篇文章主要給大家介紹了關(guān)于Java中類(lèi)與對(duì)象的一些相關(guān)知識(shí)點(diǎn),需要的朋友可以參考下
    2021-11-11

最新評(píng)論

广昌县| 全南县| 晋江市| 鄢陵县| 天气| 鹿泉市| 镇远县| 广昌县| 襄垣县| 乳源| 乐业县| 孙吴县| 高清| 烟台市| 九龙城区| 治多县| 清徐县| 鱼台县| 沭阳县| 鄢陵县| 武功县| 公主岭市| 荣昌县| 承德县| 苏州市| 垦利县| 江永县| 荣昌县| 志丹县| 固安县| 抚顺县| 溧水县| 石台县| 临颍县| 上犹县| 菏泽市| 大冶市| 蕉岭县| 桃源县| 确山县| 章丘市|