请选择 进入手机版 | 继续访问电脑版

[java] SpringBoot打印POST哀求 原始入参body体方式

[复制链接]
查看62 | 回复8 | 2021-9-14 08:08:15 | 显示全部楼层 |阅读模式
目次

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

1、起首 定义过滤器设置

  1. package com.choice.o2o.device.common.config;
  2. import com.choice.o2o.device.common.filter.LogFilter;
  3. import org.springframework.boot.web.servlet.FilterRegistrationBean;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. @Configuration
  7. public class FilterConfig {
  8. @Bean
  9. public FilterRegistrationBean registFilter() {
  10. FilterRegistrationBean registration = new FilterRegistrationBean();
  11. registration.setFilter(new LogFilter());
  12. registration.addUrlPatterns("/*");
  13. registration.setName("LogFilter");
  14. registration.setOrder(1);
  15. return registration;
  16. }
  17. }
复制代码

2、实现1中的过滤器

  1. package com.choice.o2o.three.code.config.log;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.springframework.core.Ordered;
  4. import org.springframework.web.filter.OncePerRequestFilter;
  5. import org.springframework.web.util.ContentCachingRequestWrapper;
  6. import org.springframework.web.util.ContentCachingResponseWrapper;
  7. import org.springframework.web.util.WebUtils;
  8. import javax.servlet.FilterChain;
  9. import javax.servlet.ServletException;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12. import java.io.IOException;
  13. import java.io.UnsupportedEncodingException;
  14. import java.util.Enumeration;
  15. @Slf4j
  16. public class LogParamFilter extends OncePerRequestFilter implements Ordered {
  17. // put filter at the end of all other filters to make sure we are processing after all others
  18. private int order = Ordered.LOWEST_PRECEDENCE - 8;
  19. public static final String SPLIT_STRING_M = "=";
  20. public static final String SPLIT_STRING_DOT = ", ";
  21. @Override
  22. public int getOrder() {
  23. return order;
  24. }
  25. @Override
  26. protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
  27. FilterChain filterChain) throws ServletException, IOException {
  28. ContentCachingRequestWrapper wrapperRequest = new ContentCachingRequestWrapper(request);
  29. ContentCachingResponseWrapper wrapperResponse = new ContentCachingResponseWrapper(response);
  30. String urlParams = getRequestParams(request);
  31. filterChain.doFilter(wrapperRequest, wrapperResponse);
  32. String requestBodyStr = getRequestBody(wrapperRequest);
  33. log.info("params[{}] | request body:{}", urlParams, requestBodyStr);
  34. String responseBodyStr = getResponseBody(wrapperResponse);
  35. log.info("response body:{}", responseBodyStr);
  36. wrapperResponse.copyBodyToResponse();
  37. }
  38. /**
  39. * 打印请求参数
  40. *
  41. * @param request
  42. */
  43. private String getRequestBody(ContentCachingRequestWrapper request) {
  44. ContentCachingRequestWrapper wrapper = WebUtils.getNativeRequest(request, ContentCachingRequestWrapper.class);
  45. if (wrapper != null) {
  46. byte[] buf = wrapper.getContentAsByteArray();
  47. if (buf.length > 0) {
  48. String payload;
  49. try {
  50. payload = new String(buf, 0, buf.length, wrapper.getCharacterEncoding());
  51. } catch (UnsupportedEncodingException e) {
  52. payload = "[unknown]";
  53. }
  54. return payload.replaceAll("\\n", "");
  55. }
  56. }
  57. return "";
  58. }
  59. /**
  60. * 打印返回参数
  61. *
  62. * @param response
  63. */
  64. private String getResponseBody(ContentCachingResponseWrapper response) {
  65. ContentCachingResponseWrapper wrapper = WebUtils.getNativeResponse(response,
  66. ContentCachingResponseWrapper.class);
  67. if (wrapper != null) {
  68. byte[] buf = wrapper.getContentAsByteArray();
  69. if (buf.length > 0) {
  70. String payload;
  71. try {
  72. payload = new String(buf, 0, buf.length, wrapper.getCharacterEncoding());
  73. } catch (UnsupportedEncodingException e) {
  74. payload = "[unknown]";
  75. }
  76. return payload;
  77. }
  78. }
  79. return "";
  80. }
  81. /**
  82. * 获取请求地址上的参数
  83. *
  84. * @param request
  85. * @return
  86. */
  87. public static String getRequestParams(HttpServletRequest request) {
  88. StringBuilder sb = new StringBuilder();
  89. Enumeration<String> enu = request.getParameterNames();
  90. //获取请求参数
  91. while (enu.hasMoreElements()) {
  92. String name = enu.nextElement();
  93. sb.append(name + SPLIT_STRING_M).append(request.getParameter(name));
  94. if (enu.hasMoreElements()) {
  95. sb.append(SPLIT_STRING_DOT);
  96. }
  97. }
  98. return sb.toString();
  99. }
  100. }
复制代码

Post汲取 不到body里的参数(对象参数)

检查注解

    1. @ResponseBody
    复制代码
    1. @RequestBody
    复制代码

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

检查实体

汲取 实体类,set、get方法是否精确

检查Content-Type

是否是application/json

以上为个人履历 ,盼望 能给大家一个参考,也盼望 大家多多支持脚本之家。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar 凡尘莲花1 | 2021-9-28 08:01:22 | 显示全部楼层
好好学习admin楼主的帖子!
回复

使用道具 举报

avatar 疑骨德秋忘 | 2021-10-1 22:13:34 | 显示全部楼层
admin楼主,替我问候您主治大夫!
回复

使用道具 举报

avatar 子非鱼JXX | 2021-10-5 14:05:16 | 显示全部楼层
楼上长在线啊?
回复

使用道具 举报

帖子好乱!
回复

使用道具 举报

admin楼主主机很热情啊!
回复

使用道具 举报

楼上的刚出院吧?
回复

使用道具 举报

avatar 汪晨霞 | 昨天 14:29 | 显示全部楼层
大神就是大神,这么经典!
回复

使用道具 举报

avatar 球妈2017 | 5 小时前 | 显示全部楼层
admin楼主的帖子提神醒脑啊!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则