在迁移到spring Boot RestController时将请求对象保留在签名中

pb3skfrl  于 2022-11-23  发布在  Spring
关注(0)|答案(1)|浏览(115)

我正在从Netty上实现的旧库迁移到RestController。
我曾经在控制器中有一种能力来获得整个Request对象并将其传递下去,而后来的逻辑层则从头部和查询参数中获取它们需要的任何东西。

dosomething(request: Request, someQueryParam: String) {
if(someQueryParam!=null) { doAnotherThing(request) }
}
doAnotherThing(request: Request) { .. use more query params and headers ..}

假设这有很多参数并通过更多的类。我现在如何才能做到这一点,而不暴露在底部使用的所有参数列表,在每个端点签名上?(而且不必移动我的API用户来使用requestBody)

lp0sw83n

lp0sw83n1#

Spring为你提供了很多选择。
首先是:你不必带着你的请求到处跑,在任何地方(除了多线程)你都可以得到当前的请求。
Is there a static way to get the current HttpServletRequest in Spring
否则,您也可以将HttpServletRequest request作为参数添加到控制器方法中,以获取请求并将其作为参数传递给服务。
Spring 3 MVC accessing HttpRequest from controller
但是更好的方法是在控制器级别获取所需的字段,并将其作为参数传递给服务。
1.@请求标题
1.@请求参数
1.@路径变量

  1. Request mapping in general
    然后你就可以编写很好的JUnit-Tests,你就有了很好的接口,而且服务不会被绑定到HttpRequests。

相关问题