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.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、实现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