一直使用kotlin 在spring boot 框架下进行代码编写,在使用过程当中,总结了一些 kotlin 可以减少代码开发的场景。
暂时只写这么多,想起来了其他的再更新。
访问https://start.spring.io并选择Kotlin语言。Gradle是Kotlin中最常用的构建工具,它提供了Kotlin DSL,在生成Kotlin项目时默认使用该DSL,因此这是推荐的选择。但是,如果您更喜欢Maven,也可以使用它。请注意,您可以使用https://start.spring.io/#!language=kotlin&type=gradle-project默认情况下选择Kotlin和Gradle。
$ mkdir blog && cd blog
$ curl https://start.spring.io/starter.zip -d language=kotlin -d style=web,mustache,jpa,h2,devtools -d packageName=com.example.blog -d name=Blog -d type=gradle-project -o blog.zip
kotlin 在Java 基础上完成的最大也是最可靠的改造就是空安全。针对Java常见的NullPointException问题,进行了空安全处理。
var str:String = "" //这样没问题
var str1:String = null //这样编译器会报错
var str2:String? = null //这样没问题
看懂了空安全,那spring boot 框架下,哪些地方可以简化代码呢?
@Autowire
private lateinit var testService:TestService
@Autowire
private lateinit var testNullService:TestNullService?
@GetMapping("/testParams")
fun testParams(name: String , age: String?):String{
// name 必填 , age 选填
return "test"
}
以上是常见的空安全内容。
可以看到,
最近比较火的webFlux 框架,在服务端开发时,可以使用kotlin 进行路由优化。
router {
("/test" and accept(TEXT_HTML)).nest {
GET("/", testHandler::findAllView)
GET("/{report}", testHandler::findOneView)
}
("/api/test" and accept(APPLICATION_JSON)).nest {
GET("/", apiHandler::findAll)
GET("/{id}", apiHandler::findOne)
}
}
关于Data class 在 kotlin 中没问题,但是 在spring 中 JPA使用时,需要增加 open 描述符的情况,可以通过以下配置将JPA相关的Data class 进行编译添加open处理,不需要手工添加open描述符。
plugins {
kotlin("plugin.allopen") version "1.3.61"
}
allOpen {
annotation("javax.persistence.Entity")
annotation("javax.persistence.Embeddable")
annotation("javax.persistence.MappedSuperclass")
}
@Entity
class Article(
var title: String,
var headline: String,
var content: String,
@ManyToOne var author: User,
var slug: String = title.toSlug(),
var addedAt: LocalDateTime = LocalDateTime.now(),
@Id @GeneratedValue var id: Long? = null)
@Entity
class User(
var login: String,
var firstname: String,
var lastname: String,
var description: String? = null,
@Id @GeneratedValue var id: Long? = null)