FasterXML / FasterXML/jackson-module-kotlin

Deserialization issue, @JsonCreator ignored

Offen
#932 13 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen
bug
Vorherrschende Sprache
Kotlin
Sterne
1.2k
Forks
187
Ø Merge
9 Std. 48 Min.
Gemergte PRs (30 T.)
16

Beschreibung

### Search before asking

- [x] I searched in the [issues](https://github.com/FasterXML/jackson-module-kotlin/issues) and found nothing similar.
- [x] I have confirmed that the same problem is not reproduced if I exclude the KotlinModule.
- [x] I searched in the [issues of databind](https://github.com/FasterXML/jackson-databind/issues) and other modules used and found nothing similar.
- [ ] I have confirmed that the problem does not reproduce in Java and only occurs when using Kotlin and KotlinModule.

### Describe the bug

Hello,
While updating to spring boot 3.4.x I faced an issue related to the upgrade of jackson dependencies from 2.17.3 to 2.18.2
Deserialization is not working anymore for a class with 2 constructor, one with @JsonCreator annotation.

It fails with this exception:
```
Instantiation of [simple type, class User] value failed for JSON property fullName due to missing (therefore NULL) value for creator parameter fullName which is a non-nullable type
at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 6, column: 13] (through reference chain: User["fullName"])
com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException: Instantiation of [simple type, class User] value failed for JSON property fullName due to missing (therefore NULL) value for creator parameter fullName which is a non-nullable type
at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 6, column: 13] (through reference chain: User["fullName"])
at com.fasterxml.jackson.module.kotlin.KotlinValueInstantiator.createFromObjectWith(KotlinValueInstantiator.kt:97)
at com.fasterxml.jackson.databind.deser.impl.PropertyBasedCreator.build(PropertyBasedCreator.java:214)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:541)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1497)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:348)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185)
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:342)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4931)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3868)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3851)
at UserDeserializationTest.test user deserialization(UserDeserializationTest.kt:25)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
```
It seems it take the wrong constructor, I also try with `@JsonIgnore` and `@JsonCreator(mode=DISABLED)` on the first constructor but it didn't help.
Any idea on how to solve this issue?

### To Reproduce

Project with failing test can be found on this repo https://github.com/fabienfleureau/jackson-deserialization-issue/

I have defined this class:
```kotlin
class User(
val age: Int,
fullName: String,
) {
var firstName: String = fullName.split(" ").first()
var lastName: String = fullName.split(" ").last()

fun fullName() = "$firstName $lastName"

@JsonCreator
constructor(): this(
age = 0,
fullName = "John Doe",
)
}
```

and the json to deserialize looks like this:
```json
{
"age": 25,
"firstName": "Jane",
"lastName": "Doe"
}
```

### Expected behavior

I expected to have a user deserialized having age set to 25, firstName set to Jane and lastName set to Doe

### Versions

Kotlin: 2.1
Jackson-module-kotlin: 2.18.3
Jackson-databind: 2.18.3

### Additional context

also created an issue in databind https://github.com/FasterXML/jackson-databind/issues/5040 but someone suggested to ask here

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.