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体方式的详细内容...