簡體   English   中英

如何在 Jackson (2.12.0) 和 Quarkus (1.11) 中使用 Kotlin (1.4.21) 數據 class 的默認值。

[英]How to use default values of Kotlin (1.4.21) data class in Jackson (2.12.0) and Quarkus (1.11.1)

我將 Quarkus 1.11.1 與 Kotlin 1.4.21 和 Jackson 2.12.0 一起使用。

我不明白為什么當我發送帶有已定義默認參數的數據 class 的主體的 POST 請求時,這不被接受並返回錯誤問題:指定為非空的參數是 null

在 pom.xml 文件中,我有:

    <dependency>
        <groupId>com.fasterxml.jackson.module</groupId>
        <artifactId>jackson-module-kotlin</artifactId>
        <version>2.12.0</version>
    </dependency>
    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-resteasy-jackson</artifactId>
    </dependency>
    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-jackson</artifactId>
    </dependency>

Quarkus 文檔說( https://quarkus.io/guides/kotlin#kotlin-and-jackson ):

如果 com.fasterxml.jackson.module:jackson-module-kotlin 依賴項和 quarkus-jackson 擴展(或 quarkus-resteasy-extension)已添加到項目,則 Quarkus 會自動KotlinModule bean 注冊到 ObjectMapper bean指南了解更多詳情)。

我有一個數據 class 像:

data class MyAttributes
@BsonCreator  constructor(
    @BsonProperty("myId")
    @JsonProperty("myId")
    var myId: String,
    @BsonProperty("name")
    @JsonProperty("name")
    val name: String,
    @BsonProperty("data")
    @JsonProperty("data", defaultValue = "{}")
    var data: MutableMap<String, Any> = mutableMapOf()
)

我注意到@JsonProperty注釋中的defaultValue沒有用,因為它僅用於記錄預期值( https://fasterxml.github.io/jackson-annotations/javadoc/2.12/com/fasterxml/jackson/annotation JsonProperty.html#defaultValue-- )

如果我發送 JSON 像:

{
    "myId": "AB123",
    "name": "my attribute name"
}

我得到了前面描述的錯誤,數據字段的默認值被忽略了。 如果我發送:

{
    "myId": "AB123",
    "name": "my attribute name",
    "data": {}
}

我沒有收到錯誤,因為我還發送了數據字段。

你能告訴我我哪里做錯了嗎?

謝謝

你有默認構造函數嗎? 默認情況下 jackson 需要默認構造函數。 這在數據類中並不常見,因此您可以提供構造函數,也可以執行以下操作:

@Bean
fun objectMapper(): ObjectMapper = ObjectMapper()
                    .registerKotlinModule()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM