- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章SpringBoot整合Kotlin构建Web服务的方法示例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
今天我们尝试spring boot整合kotlin,并决定建立一个非常简单的spring boot微服务,使用kotlin作为编程语言进行编码构建.
创建一个简单的spring boot应用程序。我会在这里使用maven构建项目:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<project xmlns:xsi=
"http://www.w3.org/2001/xmlschema-instance"
xmlns=
"http://maven.apache.org/pom/4.0.0"
xsi:schemalocation=
"http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelversion>
4.0
.
0
</modelversion>
<groupid>com.edurt.ski</groupid>
<artifactid>springboot-kotlin-integration</artifactid>
<version>
1.0
.
0
</version>
<packaging>jar</packaging>
<name>springboot kotlin integration</name>
<description>springboot kotlin integration is a open source springboot, kotlin integration example.</description>
<parent>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-parent</artifactid>
<version>
2.1
.
3
.release</version>
<relativepath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceencoding>utf-
8
</project.build.sourceencoding>
<project.reporting.outputencoding>utf-
8
</project.reporting.outputencoding>
<java.version>
1.8
</java.version>
<!-- plugin config -->
<plugin.maven.kotlin.version>
1.2
.
71
</plugin.maven.kotlin.version>
</properties>
<dependencies>
<!-- spring boot -->
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-web</artifactid>
</dependency>
<!-- kotlin -->
<dependency>
<groupid>com.fasterxml.jackson.module</groupid>
<artifactid>jackson-module-kotlin</artifactid>
</dependency>
<dependency>
<groupid>org.jetbrains.kotlin</groupid>
<artifactid>kotlin-stdlib-jdk8</artifactid>
</dependency>
<dependency>
<groupid>org.jetbrains.kotlin</groupid>
<artifactid>kotlin-reflect</artifactid>
</dependency>
</dependencies>
<build>
<sourcedirectory>${project.basedir}/src/main/kotlin</sourcedirectory>
<testsourcedirectory>${project.basedir}/src/test/kotlin</testsourcedirectory>
<plugins>
<plugin>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-maven-plugin</artifactid>
</plugin>
<plugin>
<artifactid>kotlin-maven-plugin</artifactid>
<groupid>org.jetbrains.kotlin</groupid>
<configuration>
<args>
<arg>-xjsr305=strict</arg>
</args>
<compilerplugins>
<plugin>spring</plugin>
<plugin>jpa</plugin>
<plugin>all-open</plugin>
</compilerplugins>
<pluginoptions>
<option>all-open:annotation=javax.persistence.entity</option>
</pluginoptions>
</configuration>
<dependencies>
<dependency>
<groupid>org.jetbrains.kotlin</groupid>
<artifactid>kotlin-maven-allopen</artifactid>
<version>${plugin.maven.kotlin.version}</version>
</dependency>
<dependency>
<groupid>org.jetbrains.kotlin</groupid>
<artifactid>kotlin-maven-noarg</artifactid>
<version>${plugin.maven.kotlin.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>kapt</id>
<goals>
<goal>kapt</goal>
</goals>
<configuration>
<sourcedirs>
<sourcedir>src/main/kotlin</sourcedir>
</sourcedirs>
<annotationprocessorpaths>
<annotationprocessorpath>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-configuration-processor</artifactid>
<version>${project.parent.version}</version>
</annotationprocessorpath>
</annotationprocessorpaths>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
|
添加所有必需的依赖项:
一个简单的应用类:
1
2
3
4
5
6
7
8
9
10
11
|
package
com.edurt.ski
import
org.springframework.boot.autoconfigure.springbootapplication
import
org.springframework.boot.runapplication
@springbootapplication
class
springbootkotlinintegration
fun main(args: array<string>) {
runapplication<springbootkotlinintegration>(*args)
}
|
添加rest api接口功能 。
创建一个hellocontroller rest api接口,我们只提供一个简单的get请求获取hello,kotlin输出信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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文件增加以下设置扫描路径 。
1
2
3
4
|
@componentscan
(value = [
"com.edurt.ski"
,
"com.edurt.ski.controller"
])
|
添加页面功能 。
修改pom.xml文件增加以下页面依赖 。
1
2
3
4
5
|
<!-- mustache -->
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-mustache</artifactid>
</dependency>
|
在src/main/resources路径下创建templates文件夹 。
在templates文件夹下创建一个名为hello.mustache的页面文件 。
1
|
<h1>hello, kotlin</h1>
|
创建页面转换器helloview 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package
com.edurt.ski.view
import
org.springframework.stereotype.controller
import
org.springframework.ui.model
import
org.springframework.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内存数据库) 。
1
2
3
4
5
6
7
8
9
10
|
<!-- data jpa and db -->
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-data-jpa</artifactid>
</dependency>
<dependency>
<groupid>com.h2database</groupid>
<artifactid>h2</artifactid>
<scope>runtime</scope>
</dependency>
|
创建user实体 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package
com.edurt.ski.model
import
javax.persistence.entity
import
javax.persistence.generatedvalue
import
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数据库操作工具类 。
1
2
3
4
5
6
7
8
|
package
com.edurt.ski.support
import
com.edurt.ski.model.usermodel
import
org.springframework.data.repository.pagingandsortingrepository
interface
usersupport : pagingandsortingrepository<usermodel,
long
> {
}
|
创建userservice服务类 。
1
2
3
4
5
6
7
8
9
10
11
12
|
package
com.edurt.ski.service
import
com.edurt.ski.model.usermodel
interface
userservice {
/**
* save model to db
*/
fun save(model: usermodel): usermodel
}
|
创建userserviceimpl实现类 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package
com.edurt.ski.service
import
com.edurt.ski.model.usermodel
import
com.edurt.ski.support.usersupport
import
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进行持久化数据 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
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 =
"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)
}
}
|
使用控制台窗口执行以下命令保存数据 。
1
|
curl -x post http:
//localhost:8080/user/save/qianmoq
|
收到返回结果 。
{"id":1,"name":"qianmoq"} 。
表示数据保存成功 。
增加数据读取渲染功能 。
修改userservice增加以下代码 。
1
2
3
4
|
/**
* get all model
*/
fun getall(page: pageable): page<usermodel>
|
修改userserviceimpl增加以下代码 。
1
2
3
|
override fun getall(page: pageable): page<usermodel> {
return
this
.usersupport.findall(page)
}
|
修改usercontroller增加以下代码 。
1
2
|
@getmapping
(value =
"list"
)
fun get(): page<usermodel> =
this
.userservice.getall(pagerequest(
0
,
10
))
|
创建userview文件渲染user数据 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
package
com.edurt.ski.view
import
com.edurt.ski.service.userservice
import
org.springframework.data.domain.pagerequest
import
org.springframework.stereotype.controller
import
org.springframework.ui.model
import
org.springframework.ui.set
import
org.springframework.web.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文件渲染数据(自行解析返回数据即可) 。
1
|
{{users}}
|
浏览器访问http://localhost:8080/user_view即可看到页面内容 。
增加单元功能 。
修改pom.xml文件增加以下依赖 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<!-- test -->
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-test</artifactid>
<scope>test</scope>
<exclusions>
<exclusion>
<groupid>junit</groupid>
<artifactid>junit</artifactid>
</exclusion>
<exclusion>
<groupid>org.mockito</groupid>
<artifactid>mockito-core</artifactid>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupid>org.junit.jupiter</groupid>
<artifactid>junit-jupiter-engine</artifactid>
<scope>test</scope>
</dependency>
|
创建userservicetest文件进行测试userservice功能 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
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 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://segmentfault.com/a/1190000018224145 。
最后此篇关于SpringBoot整合Kotlin构建Web服务的方法示例的文章就讲到这里了,如果你想了解更多关于SpringBoot整合Kotlin构建Web服务的方法示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
前言 这个东西有啥用,好玩? 确实, 好玩归好玩,其实很有使用场景。 可以自己选则一些业务节点触发这个机器人助手的消息推送; 简单举例: 有人给你的系统留下反馈意见了,推送到运营群去; 2.项目部署成
1. JWT 简介 JSON Web Token(JWT) 是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为 JSON 对象在各方之间安全地传输信息。该信息可以被验证和信
我的页面上有多个 ajax 调用,我想将它们合并为一个函数。 目前我在几个地方都有这种类型的功能: function AjaxCallOne () { //do something $.ajax(
我的 Facebook 集成基本上可以在我的应用程序中运行:出现 Facebook 对话框,用户可以选择“允许”或“不允许”。但是,我不明白 API 是如何工作的!我有一个使用此代码的 Activit
我必须将文件夹结构从我的应用程序共享到 OneDrive。 我已经检查了一个驱动器的 sdk,但在那个 sdk 中只能共享文件而不是文件夹,并且没有在该 sdk 中创建文件夹的选项 https://g
我是支付网关集成方面的新手。我必须在我的项目 (CORE PHP) 中集成 CCAvenue 支付网关集成。但是我不知道如何为开发人员测试创建商户帐户,如何获取商户 key 等。我已经进行了研发,但是
我正在尝试将“社交选项”集成到我的应用程序中。 我有 iOS6,但我的想法是有一个适用于 iOS5 的应用程序。使用 Twitter 框架非常简单,并且可以在 r.0 版本和 6.0 版本的设备上运行
我正在尝试将 flurryAds 集成到我的 iPhone 应用程序中,但我无法做到这一点。我导入名为 的 .h 文件 #import "Flurry.h" #import "FlurryAds.h"
我正在尝试在我的网站中实现类似 facebook 的按钮和评论,但我在 IE7 中遇到了评论框问题。 COMMENT USING 下拉框不知何故没有显示其他可用选项。这是我用来实现它的代码片段:
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve th
我正在使用 SOAP API 进行 PayPal 集成(Express Checkout)。在 DoExpressCheckout 调用后,我调用 GetExpressCheckoutDetails。
我正在尝试将 paypal 作为支付网关之一集成到我的应用程序中,但在我点击支付按钮后它会返回以下错误。 错误 java.lang.RuntimeException:无法使用 Intent { cmp
我目前正在尝试将 paypal 结账与我们的在线商店集成。我们正在针对 Sandbox 进行测试。除了 IPN(即时付款通知)之外的所有内容都有效。 我们阅读了很多有关 Paypal 更改其安全模型的
我正在开发一个 android 应用程序,我想在其中集成 facebook 之类的。我正在浏览链接 http://developers.facebook.com/docs/guides/mobile/
所以我正在尝试构建一个集成了 FitBit 的 iOS 应用程序 (Swift 2)。 一旦用户打开“步行”页面,用户应该能够看到他每天的步数。 理想情况下,我们不希望每个用户都注册到 FitBit。
我是集成投递箱的新手,但我不太确定如何生成调用以获取请求 token secret 。 https://www.dropbox.com/developers/reference/api#request
我已经成功集成了 PayPal。一切正常。但我希望我的表格在成功付款后重定向到我的网站。另一个问题:如何从 PayPal 得到回应?这是我的 Paypal 表格。谢谢。 `
我在我的 Android 应用程序中集成了 Paypal 。我有一个主要 Activity - 和关于 Activity ,我在其中显示 Paypal 按钮。关于从主 Activity 访问的 Act
前言: 小编引入的图片和文字描述都是来自于尚硅谷的视频讲解,在此感谢尚硅谷的老师,同时也结合 seata文档官方文档进行整合 项目地址(gitee): https://gitee.com/qine
目录 1. demo project 1.1 接口准备 1.2 配置准备 2. docker 开启远程连接
我是一名优秀的程序员,十分优秀!