今天我们尝试Spring Boot整合Kotlin,并决定建立一个非常简单的Spring Boot微服务,使用Kotlin作为编程语言进行编码构建。
创建一个简单的Spring Boot应用程序。我会在这里使用maven构建项目:
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
添加所有必需的依赖项:
kotlin-stdlib-jdk8 kotlin jdk8的lib包
kotlin-reflect kotlin反射包
一个简单的应用类:
package com.edurt.ski
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
@SpringBootApplication
class SpringBootKotlinIntegration
fun main(args: Array
runApplication
}
添加Rest API接口功能
创建一个HelloController Rest API接口,我们只提供一个简单的get请求获取hello,kotlin输出信息:
package com.edurt.ski.controller
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController
@RestController
class HelloController {
@GetMapping(value = "hello")
fun hello(): String {
return "hello,kotlin"
}
}
修改SpringBootKotlinIntegration文件增加以下设置扫描路径
@ComponentScan(value = [
"com.edurt.ski",
"com.edurt.ski.controller"
])
添加页面功能
修改pom.xml文件增加以下页面依赖
在src/main/resources路径下创建templates文件夹
在templates文件夹下创建一个名为hello.mustache的页面文件
Hello, Kotlin
创建页面转换器HelloView
package com.edurt.ski.view
import org.springframework.stereotype.Controller
import org.springframework.www.yongshiyule178.com ui.Model
import org.springframework. www.zhenghongyule.cn web.bind.annotation.GetMapping
@Controller
class HelloView {
@GetMapping(value = "hello_view")
fun helloView(model: Model): String {
return "hello"
}
}
浏览器访问http://localhost:8080/hello_view即可看到页面内容
添加数据持久化功能
修改pom.xml文件增加以下依赖(由于测试功能我们使用h2内存数据库)
创建User实体
package com.edurt.ski.model
import javax.persistence.Entity
import javax.persistence.GeneratedValue
import javax.persistence.Id
@Entity
//class UserModel(
// @Id
// @GeneratedValue
// private www.zhongyiyuL.cn 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.support
import com.edurt.ski.www.jiahuayulpt.com model.UserModel
import org.springframework.data.repository.PagingAndSortingRepository
interface UserSupport : PagingAndSortingRepository
}
创建UserService服务类
package com.edurt.ski.service
import com.edurt.ski.model.UserModel
interface UserService {
/**
* save model to db
*/
fun save(model: UserModel): UserModel
}
创建UserServiceImpl实现类
package com.edurt.www.feifanyule.cn/ ski.service
import com.edurt.ski.model.UserModel
import com.edurt.ski.support.UserSupport
import org.springframework.www.tiaotiaoylzc.com stereotype.Service
@Service(value = "userService")
class UserServiceImpl(private val userSupport: UserSupport) : UserService {
override fun save(model: UserModel): UserModel {
return this.userSupport.www.mytxyl1.com save(model)
}
}
创建用户UserController进行持久化数据
package com.edurt.ski.controller
import com.edurt.ski.model.UserModel
import com.edurt.ski.service.UserService
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
@RestController
@RequestMapping(value dasheng178.com= "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
创建UserView文件渲染User数据
package com.edurt.ski.view
import com.edurt.ski.service.UserService
import org.springframework.www.yongshi123.cn data.domain.PageRequest
import org.springframework.stereotype.Controller
import org.springframework.ui.Model
import org.springframework.ui.set
import org.springframework.web.www.yigouyule2.cn bind.annotation.GetMapping
@Controller
class 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}}
浏览器访问http://localhost:8080/user_view即可看到页面内容
增加单元功能
修改pom.xml文件增加以下依赖
创建UserServiceTest文件进行测试UserService功能
package com.edurt.ski
import com.edurt.ski.service.UserService
import org.junit.jupiter.api.AfterAll
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import 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)
}
}
源码地址:GitHub