现在在控制器之前在SpringBoot中覆盖InputStream吗?

问题描述 投票:0回答:1

如何在弹簧启动中覆盖@RequestBody内容,然后再到达控制器?

  1. 我知道有WebMvcConfigurerHandlerInterceptorAdapter类可以处理控制器之前的请求。

  2. 此外,我也在Google上搜索了[[RequestBodyAdviceAdapter。

有些链接在Spring Boot中不起作用。

How to read request.getInputStream() multiple times

How to modify request body before reaching controller in spring boot

现在我可以将输入流读取为字符串,进行一些修改并重新设置为控制器的输入流吗?

spring-boot inputstream
1个回答
0
投票
这似乎是Servlet过滤器的一个好用例。过滤器将在Controller之前收到请求,允许您修改请求,然后可以将请求向下传递到过滤器链中,以供Controller处理。

示例:https://www.baeldung.com/spring-boot-add-filter

您将需要编写自定义HttpServletRequestWrapper。在此包装器类中,构造函数将接收请求。将InputStream读入一个变量(此时您可以修改流)。还重写getInputStream()和getReader()方法以返回修改后的流(不是原始流)。

在过滤器中,创建包装的新实例,并将传入的请求传递到构造函数中。进行修改后,将包装的请求传递到chain.doFilter(myWrappedRequest, response)中,以允许下游控制器对其进行处理。

这是如何创建包装器并在过滤器中使用它的示例:https://howtodoinjava.com/servlets/httpservletrequestwrapper-example-read-request-body/

© www.soinside.com 2019 - 2024. All rights reserved.