我在kotlin-noarg
应用程序中配置了Spring
插件:
buildscript {
ext {
kotlinVersion = '1.2.51'
}
dependencies {
// ...
classpath "org.jetbrains.kotlin:kotlin-noarg:${kotlinVersion}"
}
}
apply plugin: 'kotlin'
apply plugin: 'kotlin-spring'
apply plugin: "kotlin-noarg"
noArg {
annotation("com.example.demo.DefaultConstructor")
invokeInitializers = true
}
然后我声明了我的注释:
package com.example.demo
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.CLASS)
annotation class DefaultConstructor
然后我上课:
@DefaultConstructor
data class UserForm(@field:NotNull
@field:DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") val dateTime: LocalDateTime)
这是我尝试使用UserForm
类的方式:
@GetMapping("")
public String userForm(UserForm userForm) {
userForm.copy(LocalDateTime.now());
return "/users/form";
}
因此Spring
在这里尝试使用反射来初始化我的UserForm
类,但是尽管配置了kotlin-noarg
插件,但没有生成默认的构造函数(我相信是正确的)。 / p>
问题出在哪里?是因为kotlin-noarg
插件的配置错误吗?以及如何解决?
我创建了demo project
答案 0 :(得分:0)
我不太确定答案,但是:
kotlin-noarg
提供了语法构造函数(仅在反射时可用)UserForm
(无反射),它将失败。UserForm
标记为@Entity
,它将被识别为属于spring的事物。之后,此无参数构造函数将由kotlin-spring
插件生成,或者您需要添加kotlin-jpa
插件