SpringBoot打印POST请求原始入参body体方式
目录
- SpringBoot打印POST请求原始入参body体
- 1、首先定义过滤器配置
- 2、实现1中的过滤器
- Post接收不到body里的参数(对象参数)
- 检查注解
- 检查实体
- 检查Content-Type
SpringBoot打印POST请求原始入参body体
1、首先定义过滤器配置
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; @Configurationpublic class FilterConfig { @Beanpublic FilterRegistrationBean registFilter() {FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new LogFilter()); registration.addUrlPatterns("/*"); registration.setName("LogFilter"); registration.setOrder(1); return registration; }}
2、实现1中的过滤器
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; @Slf4jpublic class LogParamFilter extends OncePerRequestFilter implements Ordered {// put filter at the end of all other filters to make sure we are processing after all othersprivate int order = Ordered.LOWEST_PRECEDENCE - 8; public static final String SPLIT_STRING_M = "="; public static final String SPLIT_STRING_DOT = ", "; @Overridepublic int getOrder() {return order; } @Overrideprotected 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 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
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- Activiti(一)SpringBoot2集成Activiti6
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- Java|规范的打印日志
- 接口|axios接口报错-参数类型错误解决
- springboot使用redis缓存
- springboot整合数据库连接池-->druid
- SpringBoot中YAML语法及几个注意点说明
- springboot结合redis实现搜索栏热搜功能及文字过滤
- springboot中.yml文件的值无法读取的问题及解决