Spring数据mongodb和kotlin

Spring数据mongodb和kotlin,spring,spring-data,kotlin,spring-data-mongodb,Spring,Spring Data,Kotlin,Spring Data Mongodb,在将spring数据mongodb与kotlin一起使用时,我遇到了一个问题。当我尝试从mongodb读取对象时,我收到一个错误,抱怨我的数据类没有默认的无参数构造函数。我可以通过在我的数据类中给每个字段一个值来解决这个问题,因此编译器将生成一个默认的无参数构造函数。当然我真的不想这么做 我知道有一个jackson kotlin模块,它包含在我的maven文件中。它适用于反序列化通过http获得的对象,所以我知道spring会选择它。然而,SpringDataMongoDB似乎没有使用jacks

在将spring数据mongodb与kotlin一起使用时,我遇到了一个问题。当我尝试从mongodb读取对象时,我收到一个错误,抱怨我的数据类没有默认的无参数构造函数。我可以通过在我的数据类中给每个字段一个值来解决这个问题,因此编译器将生成一个默认的无参数构造函数。当然我真的不想这么做

我知道有一个jackson kotlin模块,它包含在我的maven文件中。它适用于反序列化通过http获得的对象,所以我知道spring会选择它。然而,SpringDataMongoDB似乎没有使用jackson对象映射器

有没有一种方法可以在spring data mongodb中使用jackson objectmapper,或者修复没有非args构造函数的问题?

现在有了一个解决方案。 您可以在Gradle或Maven构建脚本中添加此插件,并在没有样板文件或变量“默认”值的情况下运行代码

Gradle的一个非常简单的例子:

将插件添加到build.grade

buildscript {
    ext {
        kotlinVersion = '1.1.2'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.jetbrains.kotlin:kotlin-noarg:${kotlinVersion}")
    }
}
apply plugin: "kotlin-noarg" // apply "kotlin-jpa" for JPA related annotation
noArg {
    // define annotation, where you need an empty custructor
    annotation("org.springframework.data.mongodb.core.mapping.Document") 
}
创建您的文档

@Document(collection = "simpleDoc")
class SimpleDocument(@Id val id: String, @Field val name: String)
使用Spring数据REST创建插入

curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/hal+json' -d '{"name":"awesome"}' 'http://localhost:8080/docs'
读你的医生

curl -X GET --header 'Accept: application/hal+json' 'http://localhost:8080/docs/59284d508bc7ee0b4c8fe293'

这通常是与杰克逊有关的问题。Jackson、Hibernate和其他为您创建对象的工具需要该对象声明一个无参数构造函数。实际上,这是有道理的,因为对于arg构造函数,框架不知道要分配的值。顺便说一句,你的问题最好用一些示例代码来解释。虽然有点晚,但请给我看看你的数据类。我认为您使用的是默认值,不是吗?