【发布时间】:2020-04-19 22:20:35
【问题描述】:
如何在 Spring Boot 中覆盖 @RequestBody 内容,然后才能到达控制器?
我知道有 WebMvcConfigurer 和 HandlerInterceptorAdapter 类可以在控制器之前处理请求。
我也搜索了 RequestBodyAdviceAdapter。
有几个链接不适用于 Spring Boot。
How to read request.getInputStream() multiple times
How to modify request body before reaching controller in spring boot
现在我可以将输入流读入字符串,进行一些修改并设置回控制器的输入流吗?
【问题讨论】:
-
任何提示都会有所帮助
-
尝试使用 AOP。创建一个将被称为
before控制器的方法非常容易。以下是关键字:Aspect、@Before。我无法提供更多细节,也许在当天晚些时候,向我们展示你对 Aspect 的尝试 -
我认为最好的办法是添加一个@ControllerAdvice/@RestControllerAdvice 类并实现RequestBodyAdvice。如果您知道@RequestBody 对象,那么在“afterBodyRead”中强制转换并设置特定属性。
-
@RUAROThibault 我的目标是在 json 字符串中更改对象名称(大写),然后再到达 spring boot 控制器,这样 spring 将按名称正确映射对象。我之前尝试过 AOP,这对我来说没有意义,因为我在 aop(proceedingJoinPoint.getArgs()) 中获取了映射对象,并且该值已经设置为 null。我想我需要在 Aop 之前。
-
@Lipu 感谢您的回复。我尝试了 ControllerAdvice 和 RequestBody 但我也需要访问请求正文(json字符串)的方法。我的控制器接收 json 对象(java 类)并且属性名称使用小写字母。我想在 spring boot 之前访问该 json 将尝试将其映射到对象并修改属性名称作为 java 和 spring boot 期望