我正在学习spring 5 webflux和反应流。还有新的HandlerFunctions和RouterFunctions来实现Http请求和响应。
并根据文件:
处理程序函数的注释对应方式是@RequestMapping的方法。
由于 @RequestMapping 非常容易处理,实现和理解,那么为什么需要通过这个HandlerFunctions和RouterFunction实用程序来处理Http请求和响应的更复杂和困难的方法?
请建议。
答案 0 :(得分:3)
Spring WebFlux为您提供两种不同的样式:注释和功能。
根据您要构建的应用程序类型,您必须处理的约束 - 一个或另一个可能更相关。您甚至可以在同一个应用程序中混合使用。
基于注释的模型非常成功,但它也有一些限制,主要是因为Java注释本身:
功能变体尝试修复这些问题并采用功能样式(使用JDK8函数API)和不变性。它有一个“更多的库;更少的框架”触摸它,这意味着你更能控制事物。这是一个示例:使用RouterFunction
,您可以链接RequestPredicates
并按顺序执行它们,这样您就可以完全控制最终处理传入请求的内容。使用注释模型,将通过查看方法和传入请求的注释来选择最具体的处理程序。
如果您对注释模型非常满意,则无需切换。但同样,你可以将两者结合起来,也许你会找到方便的功能模型。在我看来,即使你不打算采用它也不会受到影响 - 最糟糕的情况是,这会扩大你作为开发人员的观点并向你展示不同的做事方式。
有关详情,请查看Arjen Poutsma's talk on the functional web framework in Spring WebFlux。
答案 1 :(得分:0)
不需要,也不会破坏webflux。我使用@RequestMapping
,如果你没有特殊需要,那么HandlerFunction是必要的。
对于RouterFunctions:如果您不想使用JSON解析,并且想要直接修改ServerRequest(例如,具有原始InputStream),则必须使用RouterFunctions(AFAIK)。然后你也会返回一个原始流(Mono)。我有一个案例,我需要一点点额外播放代理,因此需要避免JSON解析,你通常使用@RequestMapping