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 ...
随机推荐
- Redis服务信息
想要获得下面的redis服务器信息,只需要在命令行中输入:info server 部分记录了 Redis 服务器的信息,它包含以下域: redis_version : Redis 服务器版本 redi ...
- java的双缓冲技术
Java的强大特性让其在游戏编程和多媒体动画处理方面也毫不逊色.在Java游戏编程和动画编程中最常见的就是对于屏幕闪烁的处理.本文从J2SE的一个再现了屏幕闪烁的Java Appilication简单 ...
- PHP变量的定义与相应的数据类型
在PHP中,变量的定义和C语言定义的方法是类似的,但是在PHP中,变量使用起来就非常灵活,一个变量既可以做整型,也可以是浮点型,也可以是字符串或者字符类型,通通只要在变量名前面加一个$然后加上你的变量 ...
- MCU实战经验:多种的按键处理
按键通常有:IO口按键(BUTTON),AD按键(通过AD采样电压),IR(遥控器) 按按键功能分:有短按键,长按键,连续按键.打个比方,遥控电视机,按一下音量键,音量增加1,这个就是短按键.按住音量 ...
- windows下ruby使用tk编程的方法
我们知道tcl/tk是一个小巧的脚本语言,tk对于跨平台的CUI编程提供了很好的移植性,我们来一下windows下ruby中要想使用tk开发需要做哪些工作: 1 gem query -r tk #选择 ...
- fastDFS与java整合文件上传下载
准备 下载fastdfs-client-java源码 源码地址 密码:s3sw 修改pom.xml 第一个plugins是必需要的,是maven用来编译的插件,第二个是maven打源码包的,可以不要. ...
- OC实现带弹跳动画按钮的界面控制器view
很多应用都有带弹跳动画发布界面,这里用一个 UIViewController 实现这种效果,外界只要 modal出不带动画这个控制器就可以实现 #import "BSPublishVC.h& ...
- AngularJS中service,factory,provider的区别
一.service引导 刚开始学习Angular的时候,经常被误解和被初学者问到的组件是 service(), factory(), 和 provide()这几个方法之间的差别.This is whe ...
- 用js来实现那些数据结构14(树02-AVL树)
在使用二叉搜索树的时候会出现 一个问题,就是树的一条分支会有很多层,而其他的分支却只有几层,就像下面这样: 如果数据量够大,那么我们在某条边上进行增删改查的操作时,就会消耗大量的时间.我们花费精力去构 ...
- 远离压力,提高效率——Getting things done读书笔记
一.确定时间.空间和工具 二.收集阶段:填充工作篮 1. 这有助于你认识到自己面对的工用量. 2. 同时让你清楚"隧道的终点"在哪 ...