Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ContentCachingRequestWrapper仅捕获内容类型为application/x-www-form-urlencoded的POST请求_Java_Spring_Spring Mvc_Servlets - Fatal编程技术网

Java ContentCachingRequestWrapper仅捕获内容类型为application/x-www-form-urlencoded的POST请求

Java ContentCachingRequestWrapper仅捕获内容类型为application/x-www-form-urlencoded的POST请求,java,spring,spring-mvc,servlets,Java,Spring,Spring Mvc,Servlets,我试图截获所有传入的HTTP请求,并在我的SpringMVC(不是SpringBoot)应用程序中处理附加到这些请求的正文。为了实现这个“入站拦截器”,我使用Spring的接口。一旦请求被拦截,我将尝试按如下方式检索正文: ContentCachingRequestWrapper requestWrapper=新ContentCachingRequestWrapper(请求); Map params=requestWrapper.getParameterMap(); byte[]body=req

我试图截获所有传入的HTTP请求,并在我的SpringMVC(不是SpringBoot)应用程序中处理附加到这些请求的正文。为了实现这个“入站拦截器”,我使用Spring的接口。一旦请求被拦截,我将尝试按如下方式检索正文:

ContentCachingRequestWrapper requestWrapper=新ContentCachingRequestWrapper(请求);
Map params=requestWrapper.getParameterMap();
byte[]body=requestWrapper.getContentAsByteArray();
鉴于此,尝试以这种方式提取尸体的局限性如下:

  • 请求的内容类型必须是
    x-www-form-urlencoded
  • 方法类型必须是
    POST
  • 对于我正在构建的应用程序,由于调用来自我无法控制的异构源,因此我无法强制执行这两个约束。是否有某种方法覆盖此行为以允许提取默认不支持的请求的正文?或者,是否有其他方法来执行此任务

    另外,我正在身体上执行日志记录+一些自定义处理。因此,中提到的解决方案没有太大帮助

    您尝试过日志吗?与纯弹簧一起工作

    他们的默认日志编写器看起来很有前途:

    您可能只想扩展这个类,以便将日志记录到您想要的所有记录器。
    除了日志记录之外,您甚至可以对请求执行完全不同的操作。

    您所说的“处理”是什么意思?您想在Spring MVC处理此更改的正文之前更改正文吗?@SvenDöring不更改正文。我有几个自定义的日志类,我正在尝试使用。谢谢你的建议,我会尝试一下。尽管目前为止,我已经找到了
    OncePerRequestFilter
    ContentCachingWrappers
    的组合,它可以很好地捕获请求()所需的所有内容,而不需要使用任何专用库