如何在弹簧启动中覆盖@RequestBody内容,然后再到达控制器?
我知道有WebMvcConfigurer和HandlerInterceptorAdapter类可以处理控制器之前的请求。
此外,我也在Google上搜索了[[RequestBodyAdviceAdapter。
How to read request.getInputStream() multiple times
How to modify request body before reaching controller in spring boot
现在我可以将输入流读取为字符串,进行一些修改并重新设置为控制器的输入流吗?
示例: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/