本文介绍如何使用 Spring Boot CLI 快速创建一个 Web 应用,使用 Kotlin 语言编写一个简单的 “Hello World”,使用 Gradle 构建并运行起来。
Kotlin(https://kotlinlang.org)是由 JetBrains 创建的基于 JVM 的静态类型编程语言。 Kotlin 的一个关键目标是与 Java 互操作,以便可以在同一个项目中一起使用 Java 和 Kotlin。
Spring Boot 目前已经支持 Kotlin 编程语言,你可以通过 Spring Initializer 在 http://start.spring.io 或者 IDE(STS、IDEA) 中创建基于 Kotlin 语言开发的 Spring Boot 应用程序。
1. 介绍
内容简介: 一个简单的 Spring Boot Web 应用示例
语言框架: Kotlin、Spring Boot、Spring MVC
难度级别: L1
阅读时间: 10 分钟
2. 工具准备
- Java SDK : 8.0
- Kotlin : 1.2.71
- Spring Boot CLI : 2.1.2
- Gradle : 4.10.2
- IntelliJ IDEA : 2018.3.3
- Curl / HTTPie
3. 实现步骤
3.1. 创建项目
首先,通过 Spring CLI 创建一个空白工程: Hello World 应用。
使用 Spring CLI 创建一个新工程
$ spring init –name hello-world –artifactId spring-boot-hello-world-kotlin –groupId org.springdev.guides –package-name org.springdev.guides.helloworld –language kotlin –build gradle –dependencies web –extract
3.2. 打开项目
打开 IDEA,点击菜单 File Open,选择项目所在目录 spring-boot-hello-world-kotlin 下的 build.gradle,打开。
3.3. 项目结构
此时创建的新工程的目录结构如下:
项目目录结构
├── build.gradle├── gradle│ └── wrapper│ ├── gradle-wrapper.jar│ └── gradle-wrapper.properties├── gradlew├── gradlew.bat├── settings.gradle└── src ├── main │ ├── kotlin │ │ └── org │ │ └── springdev │ │ └── guides │ │ └── helloworld │ │ └── HelloWorldApplication.kt │ └── resources │ ├── application.properties │ ├── static │ └── templates └── test └── kotlin └── org └── springdev └── guides └── helloworld └── HelloWorldApplicationTests.kt
在工程根目录打开 build.gradle,其内容如下:
build.gradle
buildscript { ext { kotlinVersion = \’1.2.71\’ springBootVersion = \’2.1.2.RELEASE\’ } repositories { mavenCentral() } dependencies { classpath(\”org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}\”) classpath(\”org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}\”) classpath(\”org.jetbrains.kotlin:kotlin-allopen:${kotlinVersion}\”) }}apply plugin: \’kotlin\’ apply plugin: \’kotlin-spring\’apply plugin: \’org.springframework.boot\’apply plugin: \’io.spring.dependency-management\’group = \’org.springdev.guides\’version = \’0.0.1-SNAPSHOT\’sourceCompatibility = \’1.8\’repositories { mavenCentral()}dependencies { implementation \’org.springframework.boot:spring-boot-starter-web\’ implementation \’com.fasterxml.jackson.module:jackson-module-kotlin\’ implementation \”org.jetbrains.kotlin:kotlin-stdlib-jdk8\” implementation \”org.jetbrains.kotlin:kotlin-reflect\” testImplementation \’org.springframework.boot:spring-boot-starter-test\’}compileKotlin { kotlinOptions { freeCompilerArgs = [\’-Xjsr305=strict\’] jvmTarget = \’1.8\’ }}compileTestKotlin { kotlinOptions { freeCompilerArgs = [\’-Xjsr305=strict\’] jvmTarget = \’1.8\’ }}
代码说明如下:
- Kotlin 版本使用 1.2.71;
- Spring Boot 版本使用 2.1.2.RELEASE;
- 使用 Gradle 插件: kotlin、kotlin-spring、org.springframework.boot;
- 项目的起步依赖:web、test 以及 kotlin 相关的依赖包;
- 编译 Kotlin 代码的设置。
打开应用主程序文件: HelloWorldApplication.kt,可以看到这个文件代码非常简单。
src/main/kotlin/org/springdev/guides/helloworld/HelloWorldApplication.kt
package org.springdev.guides.helloworldimport org.springframework.boot.autoconfigure.SpringBootApplicationimport org.springframework.boot.runApplication@SpringBootApplicationclass HelloWorldApplicationfun main(args: Array<String>) { runApplication<HelloWorldApplication>(*args)}
3.4. 编写代码
3.4.1. 编写 Controller
接下来我们开始编写 Controller。在 src/main/kotlin/org/springdev/guides/helloworld/目录中新增一个 HelloController.kt,内容如下:
src/main/kotlin/org/springdev/guides/helloworld/HelloController.kt
package org.springdev.guides.helloworldimport org.springframework.web.bind.annotation.GetMappingimport org.springframework.web.bind.annotation.RestController@RestController class HelloController { @GetMapping(\”/hello\”) fun hello(): String { return \”Hello, World!\” }}
代码说明如下:
- Spring MVC 提供了 @RestController 注解,这是一个 REST 接口类;
- 设置 Get 请求,请求地址为 /hello;
- 响应成功,并返回内容为:Hello, World!。
3.5. 单元测试
3.5.1. 编写测试用例
src/test/kotlin/org/springdev/guides/helloworld/HelloControllerTests.kt
package org.springdev.guides.helloworldimport org.junit.Testimport org.junit.runner.RunWithimport org.springframework.beans.factory.annotation.Autowiredimport org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest…..@RunWith(SpringRunner::class)@WebMvcTest class HelloControllerTests { @Autowired lateinit private var mockMvc: MockMvc @Test fun hello() { this.mockMvc.perform(get(\”/hello\”)) .andDo(print()) .andExpect(status().isOk()) .andExpect(content().string(\”Hello, World!\”)) }}
代码说明如下:
- Spring Boot 提供了 @WebMvcTest 注解,该注解自动会注入 MockMvc,它提供了强大的测试 MVC controller,而不需要启动 HTTP 服务器;
- 调用 MockMvc 实例模拟执行请求 /hello;
- 验证响应状态码为 200,表示成功;
- 验证返回内容为:Hello, World!。
3.5.2. 执行单元测试
$ gradle test$ open build/reports/tests/test/index.html
报告显示测试执行成功,说明功能实现正确。
4. 构建运行
你可以先打包成可执行的 JAR:
$ gradle build
接着在控制台运行:
$ java -jar build/libs/spring-boot-hello-world-groovy-0.0.1-SNAPSHOT.jar
或者,直接执行命令 gradle bootRun:
$ gradle bootRun
控制台运行日志
. ____ _ __ _ _ / / ___\’_ __ _ _(_)_ __ __ _ ( ( )___ | \’_ | \’_| | \’_ / _` | / ___)| |_)| | | | | || (_| | ) ) ) ) \’ |____| .__|_| |_|_| |___, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.1.2.RELEASE)2019-01-14 21:02:17.296 INFO 73302 — [ main] o.s.g.h.HelloWorldApplicationKt : Starting HelloWorldApplicationKt on Michaels-MBP.lan with PID 73302 (/Users/rain/Development/springdev/guides/spring/spring-boot-hello-world-kotlin/complete/build/classes/kotlin/main started by rain in /Users/rain/Development/springdev/guides/spring/spring-boot-hello-world-kotlin/complete)2019-01-14 21:02:17.299 INFO 73302 — [ main] o.s.g.h.HelloWorldApplicationKt : No active profile set, falling back to default profiles: default2019-01-14 21:02:18.511 INFO 73302 — [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)2019-01-14 21:02:18.547 INFO 73302 — [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]2019-01-14 21:02:18.548 INFO 73302 — [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.14]2019-01-14 21:02:18.557 INFO 73302 — [ main] o.a.catalina.core.AprLifecycleListener : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/Users/rain/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.]2019-01-14 21:02:18.646 INFO 73302 — [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext2019-01-14 21:02:18.647 INFO 73302 — [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1289 ms2019-01-14 21:02:18.934 INFO 73302 — [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService \’applicationTaskExecutor\’2019-01-14 21:02:19.129 INFO 73302 — [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path \’\’2019-01-14 21:02:19.133 INFO 73302 — [ main] o.s.g.h.HelloWorldApplicationKt : Started HelloWorldApplicationKt in 2.237 seconds (JVM running for 2.619)
5. 测试验证
打开浏览器,访问地址: http://localhost:8080/hello 会看到下图所示的界面:
或者,通过 curl 来验证:
$ curl -v http://localhost:8080/hello* Trying ::1…* TCP_NODELAY set* Connected to localhost (::1) port 8080 (#0)> GET /hello HTTP/1.1> Host: localhost:8080> User-Agent: curl/7.54.0> Accept: */*>< HTTP/1.1 200< Content-Type: text/plain;charset=UTF-8< Content-Length: 13< Date: Mon, 14 Jan 2019 13:03:50 GMT<* Connection #0 to host localhost left intactHello, World!
或者,通过 HTTPie 验证:
$ http :8080/helloHTTP/1.1 200Content-Length: 13Content-Type: text/plain;charset=UTF-8Date: Mon, 14 Jan 2019 13:03:40 GMTHello, World!
6. 小结
恭喜,你已经学会了使用 Spring Boot CLI 创建一个 Web 应用,用 Kotlin 语言编写一个 Hello World 程序,并且使用 Gradle 构建运行成功。
7. 相关文章
8. 参考资料
- Kotlin Reference
- Building Kotlin JVM Libraries
- Spring for Kotlin Support
- Spring Boot for Kotlin Support
原文:
https://springdev.io/guides/spring/spring-boot-hello-world-kotlin/
请关注 WX “Spring技术社区”,更多 Spring 技术资料和文档、教程,谢谢阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。