[英]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.