【问题标题】:Spring data mongodb and kotlinSpring数据mongodb和kotlin
【发布时间】:2017-04-10 14:05:48
【问题描述】:

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

我知道有一个 jackson kotlin 模块,它包含在我的 maven 文件中。它适用于反序列化我通过 http 获得的对象,所以我知道 spring 会接受它。然而,spring data mongodb似乎不使用jackson objectmapper?

有没有办法可以在 spring data mongodb 中使用 jackson objectmapper 或解决没有非 args 构造函数的问题?

【问题讨论】:

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

标签: spring spring-data kotlin spring-data-mongodb


【解决方案1】:

现在有一个No-Arg Plugin。 您可以在 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-Data-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'

【讨论】:

    猜你喜欢
    • 2019-09-02
    • 2018-08-15
    • 2020-08-06
    • 2017-04-29
    • 1970-01-01
    • 2020-01-21
    • 2012-09-20
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多