好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

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

1、首先定义过滤器配置

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

package com.choice.o2o.device测试数据mon.config;

import com.choice.o2o.device测试数据mon.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、实现1中的过滤器

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

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();

     }

 

     /**

      * 打印请求参数

      *

      * @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<String> 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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

原文链接:https://blog.csdn.net/flyfeifei66/article/details/104950618

查看更多关于SpringBoot打印POST请求原始入参body体方式的详细内容...

  阅读:50次