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

网友投稿 1007 2022-12-09

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

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;

@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中的过滤器

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 dFuhCHIoFilterInternal(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) {

http:// 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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:C++ 程序流程结构详解
下一篇:解决kafka消息堆积及分区不均匀的问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~