Spring5新特性:函数式Web框架.docx.pdf
《Spring5新特性:函数式Web框架.docx.pdf》由会员分享,可在线阅读,更多相关《Spring5新特性:函数式Web框架.docx.pdf(13页珍藏版)》请在三一文库上搜索。
1、Spring 5新特性:函数式Web框架 Spring 5.0的第二个里程碑是引入了一个新的函数式web框架。在这篇文章中,我们将给 出关于这个框架的更多信息。 举例 我们先从示例应用程序的一些摘录开始。下面是暴露Person对象的响应信息库。很类似于 传统的,非响应信息库,只不过它返回FluxvPerson而传统的返回List ,以及 返回Mono的地方返回Person。Mono用作完成标识 : 指出何时保存被完 成。关于Reactor类型的更多信息,请参阅此博客文章。 publicinterfacePersonRepository MonogetPerson(int id); Fluxal
2、lPeople(); MonosavePerson(Mono person); F面是我们如何暴露带有新的函数式web框架的资源库 : 汕 id “ return Response.ok() .body(fromPublisher(person, Person. class ); ) Flux people = repository.allPeople (); return Response.ok() .body(fromPublisher(people, Person. class ); ) ? and (route (POST ( /person 11 ), request - ) ; 卜
3、面我们要介绍如何运行, 比如在Reactor Netty中: HttpHandler httpHandler = RouterFunctions.toHttpHandler(route); ReactorHttpHmnd丄erAdapter adapter = new ReactorHttpHandlerAdapter(httpHandler); HttpServer server = HttpServer.create ( nlocalhostn z 8080 ); n/person11 ) z server.startAndAwait(adapter); 最后要做的一件事是试一试: $ c
4、url 1 http: /localhost: 8080/person/11 11 name 11:,T John Doe” . nage11 : 42 下面还有更多介绍 , 让我们挖掘得更深 ! 核心组件 我会通过彻底说明核心组件来介绍框架 :HandlerFunction? RouterFunction r以及 FilterFunction? 这三个接口以及文中描述的所有其他类型都可以在 org.springframework.web.reactive.function 包中找到。 HandlerFunction 这一新框架的起点是 HandlerFunction t基本上是Functio
5、n , 其中Request和Response是新定义的,一成不变的界面友好地来提供JDK-8 DSL到底层 HTTP消息。对于构建Response实体是一个方便的构建工具,非常类似于在 ResponseEntity中看至!J的。对应到 HandlerFunction注解是一个带有 RequestMapping 的方法。 下面是一个简单的“Hello World“处理函数的例子,返回有200状态以及body为String 的 响应消息: HandlerFunc ti or) helioWorld = request - Response ? ok () ) 。没有副作用有很多好处:易于测试, 编
6、写和优化。 RouterFunction 传入的请求被路由到有RouterFunction的处理函数 ( 即Function )路由到处理函数,如果它匹配的话; 否则就返回一个空 的结果。路由方法与RequestMapping注解的作用相似。但是,还有一个显著的区别: 用注解时路由会被限制到注解的value所能表达的范围,处理这些方法的覆盖是困难的; 当 用路由方法的时候,代码就在那里,可以轻松的覆盖或替换。 下面是一个有内嵌处理函数的路由函数的例子。它看起来有点冗长,但不要担心:我们会 找 到办法让它变短。 RouterFunction helloWorldRoute = (request.
7、path().equals( ”/hello world ” return Optional ? empty (); 般不用写完整的路由方法,而是静态引入RouterFunctions.routeO ,这样就可以用请求 判断式 (RequestPredicate )(即Predicate)和处理方法 (HandlerFunction ) 创 建路由方法了。如果判断式判断成功则返回处理方法,否则返回空结果。如下是用route 方法方式重写上面的例子: RouterFunctionv String helloWorldRoute = RouterFunctions.route(request re
8、quest.path() .equals( n/hello-worldn ), request 一Response.ok () .body (fromObject( Hello World 11 ); 你可以 ( 静态地 )导入Requestpredicates广以访问常用的谓词,基于路径、HTTP方法、 内容类型等等匹配。有了它, 我们可以使helloWorldRoute更简单: RouterFunction helloWorldRoute = RouterFunctions ? route (RequestPredicates .path ( n/hello-world11 ) Optio
9、nal.of (r return Optional.of (r - Response.ok() .body(fromObject ( nHello request - Response ? ok () Response.ok () .body (fromObject ( fl Hello World 11 ) ? and (route(path( n/the-answern ) z request - Response.ok () .body (fromObject ( 1142n ); 如果路径匹B/hello-world ,以上将回应“Hello World“, 如果匹配/the-answ
10、er,则同 时返 回42“。如果两者都不匹配,则返回一个空的Optionalo请注意,组合的路由函数会依 次执行,因此在具体函数之前放入泛型函数是有意义的。 你也可以组合要求谓词,通过调用and或or。工作方式是这样:对于and , 如果两个给定 谓词匹配的话 , 结果谓词匹配 , 而如果两者中的一个谓语匹配的话,那么就or匹配。例如: RouterFunction route = route(method(HttpMethod.GET) ? and (path ( ”/hel 丄 oworld ” ) , request - Response.ok () .body (fromObject
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Spring5 特性 函数 Web 框架 docx
链接地址:https://www.31doc.com/p-5616330.html