Spring Webflux: Kotlin DSL [片断]
原文链接:https://dzone.com/articles/spring-webflux-kotlin-dsl-snippets
作者:Biju Kunjummen
译者:Jackie Tang
如果您还没有玩转Spring Webflux,那么可以使用基于kotlin的DSL开发一个函数式API。
Spring Webflux最近 介绍一个特性来定义函数式API,它使用一个非常直观的基于 Kotlin的 DSL。
这篇文章将简单地展示一组具有鲜明对比的定义API的方式,一个是基于java流畅的API,一个是基于Kotlin的DSL。
在Java中,使用函数式编程风格来定义一组CRUD的Spring Webflux API,代码通常是这样的:
RouterFunction<?> apis() {
return nest(path("/hotels"), nest(accept(MediaType.APPLICATION_JSON),
route(
GET("/"), messageHandler::getMessages)
.andRoute(POST("/"), messageHandler::addMessage)
.andRoute(GET("/{id}"), messageHandler::getMessage)
.andRoute(PUT("/{id}"), messageHandler::updateMessage)
.andRoute(DELETE("/{id}"), messageHandler::deleteMessage)
));
}
这些API的细节非常清楚,并且以一种流畅的方式定义,只有几个关键字——route、nest和HTTP行为。
这些API也可以使用基于kotlin的DSL(以及一些巧妙地使用Kotlin扩展函数),用下面的方式来实现:
@Bean
fun apis() = router {
(accept(APPLICATION_JSON) and "/messages").nest {
GET("/", messageHandler::getMessages)
POST("/", messageHandler::addMessage)
GET("/{id}", messageHandler::getMessage)
PUT("/{id}", messageHandler::updateMessage)
DELETE("/{id}", messageHandler::deleteMessage)
}
}
我觉得这比基于java的DSL在可读性方面要好一些。如果这个API更加复杂,譬如Sébastien Deleuze所演示的精彩例子中所示,有多个层次的嵌套,这时基于kotlin DSL的优势就发明显了。
在下一篇文章中,我将深入研究这种支持是如何实现的。
这个示例在 my GitHub repo here可以找到。
本文由spring4all.com翻译小分队创作,采用 知识共享-署名-非商业性使用-相同方式共享 4.0 国际 许可 协议进行许可。
http://www.spring4all.com/article/1131
Spring Webflux: Kotlin DSL [片断]的更多相关文章
- Spring WebFlux开门迎客,却来了一位特殊客人
话说Spring WebFlux已经出现有一段时间了,但是知道他的人并不是很多.这让他很是闷闷不乐. 还有更惨的是,那些敢于吃螃蟹的人在尝试了他之后,有的竟把代码重新改回到Spring MVC的同步模 ...
- 爸爸又给Spring MVC生了个弟弟叫Spring WebFlux
情景引入 很早之前,Java就火起来了,是因为它善于开发和处理网络方面的应用. Java有一个爱好,就是喜欢制定规范标准,但自己又不善于去实现. 反倒是一些服务提供商使用它的规范标准来制造应用服务器而 ...
- Spring WebFlux 响应式编程学习笔记(一)
各位Javaer们,大家都在用SpringMVC吧?当我们不亦乐乎的用着SpringMVC框架的时候,Spring5.x又悄(da)无(zhang)声(qi)息(gu)的推出了Spring WebFl ...
- Spring WebFlux 要革了谁的命?
Spring WebFlux 要革了谁的命? mp.weixin.qq.com 托梦 Java国王昨晚做了一个梦. 梦中有个白胡子老头儿,颇有仙风道骨, 告诉他说:“你们Java啊,实在是太弱了,连 ...
- 基于Angular和Spring WebFlux做个小Demo
前言 随着Spring Boot2.0正式发布,Spring WebFlux正式来到了Spring Boot大家族里面.由于Spring WebFlux可以通过更少的线程去实现更高的并发和使用更少的硬 ...
- Spring WebFlux, 它是一种异步的, 非阻塞的, 支持背压(Back pressure)机制的Web 开发WebFlux 支持两种编程风(姿)格(势) 使用@Controller这种基于注解
概述 什么是 Spring WebFlux, 它是一种异步的, 非阻塞的, 支持背压(Back pressure)机制的Web 开发框架. 要深入了解 Spring WebFlux, 首先要了知道 R ...
- 朱晔和你聊Spring系列S1E5:Spring WebFlux小探
阅读PDF版本 本文会来做一些应用对比Spring MVC和Spring WebFlux,观察线程模型的区别,然后做一下简单的压力测试. 创建一个传统的Spring MVC应用 先来创建一个新的web ...
- 【SFA官方翻译】Spring WebFlux和Spring Cloud进行响应式微服务开发
源码,修正一些错误: https://github.com/bigben0123/sample-spring-cloud-webflux 原创 SpringForAll社区 2018-05-18 作者 ...
- 初识Spring Webflux
Important to know is that there are two ways to use Spring Webflux. One using annotations, which is ...
随机推荐
- HBase 快照操作
1.配置hbase-site.xml <property> <name>hbase.snapshot.enabled</name> <value>tru ...
- ReentrantReadWriteLock读写锁的使用2
本文可作为传智播客<张孝祥-Java多线程与并发库高级应用>的学习笔记. 这一节我们做一个缓存系统. 在读本节前 请先阅读 ReentrantReadWriteLock读写锁的使用1 第一 ...
- cocoa编程第4版 8.6 挑战2 解答
该版本的RaiseMan不用Array Controller,全部手写代码. 要注意的有以下几点: 1.TableView每列的sort设置和AC版的相同,但要手写排序代理方法 2.TableView ...
- 如何在Visual Studio 2017中使用C# 7+语法
前言 之前不知看过哪位前辈的博文有点印象C# 7控制台开始支持执行异步方法,然后闲来无事,搞着,搞着没搞出来,然后就写了这篇博文,不喜勿喷,或许对您有帮助. 在Visual Studio 2017配置 ...
- Mac环境svn的使用
在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境.在Mac环境下,由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件的前提下使用svn功能,不过还 ...
- IT轮子系列(三)——如何显示方法名——Swagger的使用(三)
前言 在上一篇文章IT轮子系列(三)——如何给返回类型添加注释——Swagger的使用(二) 介绍如何使用swashbuckle的时候忽略了一个问题,就是默认创建的API项目在生成文档的时候是没有显示 ...
- partition List(划分链表)
Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...
- 第15章-输入/输出 --- 理解Java的IO流
(一)理解Java的IO流 JAVA的IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在Java中把不同的输入/输出(键盘.文件.网络连接等)抽象表述为"流"( ...
- Day10 多线程理论 开启线程
多线程: 多线程和多进程的不同是他们占用的资源不一样, 一个进程里边可以包含一个或多个进程, 进程的开销大,线程的开销小. 打个比方来说:创建一个进程,就是创建一个车间.创建一个线程,就是在一个车间创 ...
- 拖拽模块move2
之前的模块代码太死板了,由于内部定义了控件的ID,使用起来很不方便,so-----直接看代码 <script> var move =(function(){ function drop(b ...