Noarg构造函数未创建

时间:2018-07-15 20:39:22

标签: spring spring-boot kotlin

我在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

1 个答案:

答案 0 :(得分:0)

我不太确定答案,但是:

  1. kotlin-noarg提供了语法构造函数(仅在反射时可用)
  2. 如果spring试图直接实例化UserForm(无反射),它将失败。
  3. 有一种方法可以避免此问题。 在此之后将UserForm标记为@Entity,它将被识别为属于spring的事物。之后,此无参数构造函数将由kotlin-spring插件生成,或者您需要添加kotlin-jpa插件