专栏首页全栈架构使用Spring Boot和Kotlin创建RESTfull API

使用Spring Boot和Kotlin创建RESTfull API

使用 Kotlin 结合 SpringBoot 开发一个 RESTFul版本的 HelloWorld

如果单单Kotlin 我是不相信在短时间内有产生多大的风波,但是如果Kotlin 能和 Java 开发神器 SpringBoot 结合起来,我感觉能飞。。。

1.首先新建 GradleKotlin工程

打开IDEA ,File->New->Project

输入相关信息之后下一步:

一般 GroupId为公司域名反着写,加上项目名字

建议选中 Useauto-import,自动导包 ,使用本地 Gradle,但是需要先安装Gradle(https://gradle.org/install/)

如果没有选择 使用本地 Gradle 项目创建完成之后Gradle的包需要下载,这个时间有点长,以前做Android就深受其苦,所有要做好心理准备,除非你有一个好用的FQ工具。

项目创建完成之后会生成一个 Gradle文件 build.gradlesettings.gradle, settings.gradle文件我们暂且不管,先看看 build.gradle文件:

group 'name.quanke.kotlin.restful'

version '1.0-SNAPSHOT'

buildscript {

ext.kotlin_version = '1.2.10'

repositories {

mavenCentral()

}

dependencies {

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

}

}

apply plugin: 'kotlin'

repositories {

mavenCentral()

}

dependencies {

compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"

}

compileKotlin {

kotlinOptions.jvmTarget = "1.8"

}

compileTestKotlin {

kotlinOptions.jvmTarget = "1.8"

}

下载依赖和插件也是一个漫长痛苦的过程。各位不要心急,慢慢来,一次不行多试几次。

从生成的配置文件看, IDEA已经自动把 Gradle构建 Kotlin工程插件 kotlin-gradle-plugin,以及 Kotlin

标准库 kotlin-stdlib添加到 build.gradle文件中了。

2.配置 build.gradle文件

group 'name.quanke.kotlin.rest'

version '1.0-SNAPSHOT'

buildscript {

ext.kotlin_version = '1.2.10'

ext.spring_boot_version = '1.5.4.RELEASE'

repositories {

mavenCentral()

}

dependencies {

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version" // See https://kotlinlang.org/docs/reference/compiler-plugins.html#kotlin-spring-compiler-plugin

// org.jetbrains.kotlin:kotlin-allopen 是全开放编译器插件。我们使用Kotlin 调用Java的Spring AOP框架和库,需要类为 open(可被继承实现),而Kotlin 类和函数都是默认 final 的,这样我们需要为每个类和函数前面加上open修饰符。

// 这样的代码写起来,可费事了。还好,我们有all-open 编译器插件。它会适配 Kotlin 以满足这些框架的需求,并使用指定的注解标注类而其成员无需显式使用 open 关键字打开。 例如,当我们使用 Spring 时,就不需要打开所有的类,跟我们在Java中写代码一样,只需要用相应的注解标注即可。

classpath "org.springframework.boot:spring-boot-gradle-plugin:$spring_boot_version"

}

}

apply plugin: 'kotlin'

apply plugin: "kotlin-spring" // See https://kotlinlang.org/docs/reference/compiler-plugins.html#kotlin-spring-compiler-plugin

apply plugin: 'org.springframework.boot'

jar {

baseName = '0_2RestfulApi-service'

version = '0.1.0'

}

repositories {

mavenCentral()

}

dependencies {

compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"

compile 'org.springframework.boot:spring-boot-starter-web'

testCompile('org.springframework.boot:spring-boot-starter-test')

}

compileKotlin {

kotlinOptions.jvmTarget = "1.8"

}

compileTestKotlin {

kotlinOptions.jvmTarget = "1.8"

}

3.创建包

在kotlin目录下面创建:

name.quanke.kotlin.rest

注意:不能直接在kotlin目录下面写Application 类,不然会报错

Your ApplicationContext is unlikely to start due to a @ComponentScan of the default package

3.创建数据模型Greeting类:

package name.quanke.kotlin.rest

/**

* Created by http://quanke.name on 2018/1/9.

*/

data class Greeting(val id: Long, val content: String)

如果是Java写的话,想象一下这需要多少行代码,看看kotlin,不明则厉。。。

5.创建GreetingController

package name.quanke.kotlin.rest

import org.springframework.web.bind.annotation.GetMapping

import org.springframework.web.bind.annotation.RequestParam

import org.springframework.web.bind.annotation.RestController

import java.util.concurrent.atomic.AtomicLong

/**

* Created by http://quanke.name on 2018/1/9.

*/

@RestController

class GreetingController {

val counter = AtomicLong()

@GetMapping("/greeting")

fun greeting(@RequestParam(value = "name", defaultValue = "World") name: String) =

Greeting(counter.incrementAndGet(), "Hello, $name")

}

6.创建 Application

package name.quanke.kotlin.rest

import org.springframework.boot.SpringApplication

import org.springframework.boot.autoconfigure.SpringBootApplication

/**

* Created by http://quanke.name on 2018/1/9.

*/

@SpringBootApplication

class Application

fun main(args: Array<String>) {

SpringApplication.run(Application::class.java, *args)

}

点击Gradle的bootRun:

或者点击

如果没有毛病,访问

http://127.0.0.1:8080/greeting?name=quanke.name

输出:

那么恭喜你,一个kotlin 和spring boot的web服务就这么搞定了。。。

服务默认是8080端口,如果8080端口刚好被占用了,那在resources目录下新建一个application.yml文件:

server:
  port: 1234

把端口改成你想要的。

当然这只是开始的演示,么有什么卵用。。。之后可以用于生产的demo,呼之欲出。

《Spring Boot in kotlin 实战》,欢迎关注!

本文分享自微信公众号 - 全栈架构(keatingr),作者:全科

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-01-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring Boot 与 Kotlin 验证web表单信息

    在做web开发的时候,我们需要验证表单,确认用户提交的信息是安全的,比如用户名不能超过多少位,密码不能少于多少位等等。

    全科
  • Spring Boot 与 Kotlin 处理Web表单提交

    我们在做web开发的时候,肯定逃不过表单提交,这篇文章通过Spring Boot使用Kotlin 语言 创建和提交一个表单。

    全科
  • Spring Boot 与 Kotlin 使用MongoDB数据库

    下面就来简单介绍一下 MongoDB,并且通过一个例子来介绍 SpringBoot中对 MongoDB访问的配置和使用。

    全科
  • 如何用kotlin开发同时支持iOS和Android的库

    虽说kotlin-native可以支持链接到c,java,objective-c等语言,甚至可以进行原生开发,但是在使用的过程中并不友好,配置繁琐且api相对生...

    Leacode
  • 《Springboot极简教程》Springboot使用Kotlin和Java混合编程配置工程目录结构让kotlin代码的归kotlin目录,java代码归java目录Java代码Kotlin代码互相

    要想实现Springboot使用Kotlin和Java混合编程,需要使用kotlin插件:

    一个会写诗的程序员
  • Android开发:Kotlin下配置DataBinding

    近日,随着Google召开了Google I/O 2017,Kotlin大火一把。因为Google宣布Kotlin为First-class开发语言作 为一名Ko...

    JarvanMo
  • Gradle Kotlin DSL 的 accessors 生成问题

    如果你想用 gradle kotlin DSL,那么请注意,accessors 的支持从 0.8.0 开始(gradle 3.5),后续也做了一些完善和更新,目...

    bennyhuo
  • Android SystemUI(一):图文并茂的介绍 :D

    菜天哥哥
  • 解决KafkaOffsetMonitor页面不展示问题

        今天安装最新版KafkaOffsetMonitor-assembly-0.2.1,发现安装完成后页面加载缓慢,并且最终显示不出任何东西,查看consol...

    尚浩宇
  • 高性能平台设计——美团旅行结算平台实践

    点击蓝字订阅,不错过下一篇好文章 本文根据第23期美团点评技术沙龙演讲内容整理而成。 酒旅有很多条业务线,例如酒店、门票、火车票等等,每种业务都有结算诉求,而结...

    美团技术团队

扫码关注云+社区

领取腾讯云代金券