我有一個科特林數據類,看起來像這樣,你如何讓傑克遜使用Kotlin默認參數的缺失值?
data class SomeData(
private val notInJson: String = "some default value",
private val inJson: String
)
和JSON字符串,我想反序列化到這個類的一個實例 -
{
"inJson" : "value"
}
當我嘗試反序列化此數據,我得到一個錯誤,參數notInJson
不能爲空。似乎傑克遜正在傳遞一個空值,因爲它在json字符串中缺失。
有沒有辦法讓傑克遜沒有爲它傳遞任何值,以便可以使用類定義中指定的默認值?
- 編輯 -
我做的映射器註冊KotlinModule()。使用2.7.8版本或涉及所有傑克遜軟件包。
下面的代碼 -
@Test fun jackson_kotlin_module() {
val mapper = ObjectMapper().registerModule(KotlinModule())
println(
mapper.readValue("""{ "inJson" : "some value" }""", SomeData::class.java))
}
給我 -
com.fasterxml.jackson.databind.JsonMappingException: Instantiation of [simple
type, class SomeData] value failed (java.lang.IllegalArgumentException):
Parameter specified as non-null is null: method SomeData.<init>, parameter
notInJson
at [Source: { "inJson" : "some value" }; line: 1, column: 27]
@miensol說,你需要升級到最新的傑克遜(2.8.4或更高版本),因爲處理默認參數的能力已被添加,並且尚未被回溯。 –