博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot整合Kotlin构建Web服务
阅读量:6624 次
发布时间:2019-06-25

本文共 8472 字,大约阅读时间需要 28 分钟。

今天我们尝试Spring Boot整合Kotlin,并决定建立一个非常简单的Spring Boot微服务,使用Kotlin作为编程语言进行编码构建。

创建一个简单的Spring Boot应用程序。我会在这里使用maven构建项目:

4.0.0
com.edurt.ski
springboot-kotlin-integration
1.0.0
jar
springboot kotlin integration
SpringBoot Kotlin Integration is a open source springboot, kotlin integration example.
org.springframework.boot
spring-boot-starter-parent
2.1.3.RELEASE
UTF-8
UTF-8
1.8
1.2.71
org.springframework.boot
spring-boot-starter-web
com.fasterxml.jackson.module
jackson-module-kotlin
org.jetbrains.kotlin
kotlin-stdlib-jdk8
org.jetbrains.kotlin
kotlin-reflect
${project.basedir}/src/main/kotlin
${project.basedir}/src/test/kotlin
org.springframework.boot
spring-boot-maven-plugin
kotlin-maven-plugin
org.jetbrains.kotlin
-Xjsr305=strict
spring
jpa
all-open
org.jetbrains.kotlin
kotlin-maven-allopen
${plugin.maven.kotlin.version}
org.jetbrains.kotlin
kotlin-maven-noarg
${plugin.maven.kotlin.version}
kapt
kapt
src/main/kotlin
org.springframework.boot
spring-boot-configuration-processor
${project.parent.version}

添加所有必需的依赖项:

  • kotlin-stdlib-jdk8 kotlin jdk8的lib包
  • kotlin-reflect kotlin反射包

一个简单的应用类:

package com.edurt.skiimport org.springframework.boot.autoconfigure.SpringBootApplicationimport org.springframework.boot.runApplication@SpringBootApplicationclass SpringBootKotlinIntegrationfun main(args: Array
) { runApplication
(*args)}

添加Rest API接口功能


创建一个HelloController Rest API接口,我们只提供一个简单的get请求获取hello,kotlin输出信息:

package com.edurt.ski.controllerimport org.springframework.web.bind.annotation.GetMappingimport org.springframework.web.bind.annotation.RestController@RestControllerclass HelloController {    @GetMapping(value = "hello")    fun hello(): String {        return "hello,kotlin"    }}

修改SpringBootKotlinIntegration文件增加以下设置扫描路径

@ComponentScan(value = [    "com.edurt.ski",    "com.edurt.ski.controller"])

添加页面功能


  • 修改pom.xml文件增加以下页面依赖
org.springframework.boot
spring-boot-starter-mustache
  • src/main/resources路径下创建templates文件夹
  • templates文件夹下创建一个名为hello.mustache的页面文件

Hello, Kotlin

  • 创建页面转换器HelloView
package com.edurt.ski.viewimport org.springframework.stereotype.Controllerimport org.springframework.ui.Modelimport org.springframework.web.bind.annotation.GetMapping@Controllerclass HelloView {    @GetMapping(value = "hello_view")    fun helloView(model: Model): String {        return "hello"    }}
  • 浏览器访问:8080/hello_view即可看到页面内容

添加数据持久化功能


  • 修改pom.xml文件增加以下依赖(由于测试功能我们使用h2内存数据库)
org.springframework.boot
spring-boot-starter-data-jpa
com.h2database
h2
runtime
  • 创建User实体
package com.edurt.ski.modelimport javax.persistence.Entityimport javax.persistence.GeneratedValueimport javax.persistence.Id@Entity//class UserModel(//        @Id//        @GeneratedValue//        private var id: Long? = 0,//        private var name: String//)class UserModel {        @Id        @GeneratedValue        var id: Long? = 0                get() = field                set        var name: String? = null                get() = field                set}
  • 创建UserSupport dao数据库操作工具类
package com.edurt.ski.supportimport com.edurt.ski.model.UserModelimport org.springframework.data.repository.PagingAndSortingRepositoryinterface UserSupport : PagingAndSortingRepository
{}
  • 创建UserService服务类
package com.edurt.ski.serviceimport com.edurt.ski.model.UserModelinterface UserService {    /**     * save model to db     */    fun save(model: UserModel): UserModel}
  • 创建UserServiceImpl实现类
package com.edurt.ski.serviceimport com.edurt.ski.model.UserModelimport com.edurt.ski.support.UserSupportimport org.springframework.stereotype.Service@Service(value = "userService")class UserServiceImpl(private val userSupport: UserSupport) : UserService {    override fun save(model: UserModel): UserModel {        return this.userSupport.save(model)    }}
  • 创建用户UserController进行持久化数据
package com.edurt.ski.controllerimport com.edurt.ski.model.UserModelimport com.edurt.ski.service.UserServiceimport org.springframework.web.bind.annotation.PathVariableimport org.springframework.web.bind.annotation.PostMappingimport org.springframework.web.bind.annotation.RequestMappingimport org.springframework.web.bind.annotation.RestController@RestController@RequestMapping(value = "user")class UserController(private val userService: UserService) {    @PostMapping(value = "save/{name}")    fun save(@PathVariable name: String): UserModel {        val userModel = UserModel()//        userModel.id = 1        userModel.name = name        return this.userService.save(userModel)    }}
  • 使用控制台窗口执行以下命令保存数据
curl -X POST http://localhost:8080/user/save/qianmoQ

收到返回结果

{"id":1,"name":"qianmoQ"}

表示数据保存成功

增加数据读取渲染功能


  • 修改UserService增加以下代码
/** * get all model */fun getAll(page: Pageable): Page
  • 修改UserServiceImpl增加以下代码
override fun getAll(page: Pageable): Page
{ return this.userSupport.findAll(page)}
  • 修改UserController增加以下代码
@GetMapping(value = "list")fun get(): Page
= this.userService.getAll(PageRequest(0, 10))
  • 创建UserView文件渲染User数据
package com.edurt.ski.viewimport com.edurt.ski.service.UserServiceimport org.springframework.data.domain.PageRequestimport org.springframework.stereotype.Controllerimport org.springframework.ui.Modelimport org.springframework.ui.setimport org.springframework.web.bind.annotation.GetMapping@Controllerclass UserView(private val userService: UserService) {    @GetMapping(value = "user_view")    fun helloView(model: Model): String {        model["users"] = this.userService.getAll(PageRequest(0, 10))        return "user"    }}
  • 创建user.mustache文件渲染数据(自行解析返回数据即可)
{
{users}}
  • 浏览器访问:8080/user_view即可看到页面内容

增加单元功能


  • 修改pom.xml文件增加以下依赖
org.springframework.boot
spring-boot-starter-test
test
junit
junit
org.mockito
mockito-core
org.junit.jupiter
junit-jupiter-engine
test
  • 创建UserServiceTest文件进行测试UserService功能
package com.edurt.skiimport com.edurt.ski.service.UserServiceimport org.junit.jupiter.api.AfterAllimport org.junit.jupiter.api.Testimport org.springframework.beans.factory.annotation.Autowiredimport org.springframework.boot.test.context.SpringBootTestimport org.springframework.data.domain.PageRequest@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)class UserServiceTest(@Autowired private val userService: UserService) {    @Test    fun `get all`() {        println(">> Assert blog page title, content and status code")        val entity = this.userService.getAll(PageRequest(0, 1))        print(entity.totalPages)    }}

源码地址:

转载地址:http://rxjpo.baihongyu.com/

你可能感兴趣的文章
css 固定表头的表格,和 width:auto, margin:auto等 自计算方法
查看>>
身份证号验证
查看>>
新手应该知道的流量概念
查看>>
16、约瑟夫问题
查看>>
R 安装car包失败
查看>>
软工网络15Alpha阶段敏捷冲刺博客汇总
查看>>
仿写百度首页
查看>>
今日词话:点绛唇·感兴
查看>>
iOS面试题(二)
查看>>
UVA116 Unidirectional TSP 单向TSP
查看>>
React 新手随笔
查看>>
阿里云手动安装特定版本的nginx
查看>>
吉祥三宝--java版
查看>>
[转载] 七龙珠第一部——第036话 恐怖的玛斯鲁塔
查看>>
将HG版本库推送到Git服务器
查看>>
使用 github 做代码管理,知道这些就够了
查看>>
一、机器学习简介
查看>>
Linux 内核进程管理之进程ID【转】
查看>>
SQL Server检测是不是数字类型的函数(非ISNUMERIC)
查看>>
软件工程课程总结
查看>>