Как заставить Джексона использовать параметры по умолчанию для Kotlin для отсутствующих значений?

У меня есть класс данных Kotlin, который выглядит так,

data class SomeData( private val notInJson: String = "some default value", private val inJson: String ) 

и json string, я хочу deserialize в экземпляр этого класса –

 { "inJson" : "value" } 

Когда я пытаюсь десериализовать эти данные, я получаю сообщение об ошибке, что параметр notInJson не может быть нулевым. Похоже, что Джексон передает ему нулевое значение, поскольку в строке json отсутствует.

Есть ли способ, чтобы Джексон не прошел какое-либо значение для него, чтобы можно было использовать значение по умолчанию, указанное в определении класса?

–РЕДАКТИРОВАТЬ–

Я регистрирую KotlinModule () с помощью mapper. Использование версии 2.7.8 или всех пакетов jackson.

Следующий код –

 @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] 

Параметры по умолчанию – это функция Kotlin. Джексон не знает об этом, поэтому нам нужно как-то сообщить об этом, чтобы поддержать его. К счастью, есть отличный модуль jackson-kotlin, который позволит вам:

 val mapper: ObjectMapper = ObjectMapper() .registerModule(KotlinModule()) //let Jackson know about Kotlin ... data class SomeData( private val notInJson: String = "some default value", private val inJson: String ) ... val data = mapper.readValue<SomeData>("""{"inJson": "sample value"}""") println(data) // -> SomeData(notInJson=some default value, inJson=sample value) 

Для получения инструкций, как использовать это, посмотрите на модуль Jackson -kotlin-модуль Readme и обратите особое внимание на версии модуля и самого Джексона. Для того, чтобы параметры по умолчанию работали, вам понадобится хотя бы версия 2.8.4 модуля jackson-kotlin