FasterXML / FasterXML/jackson-module-kotlin
Deserialization issue, @JsonCreator ignored
- Dominant language
- Kotlin
- Stars
- 1.2k
- Forks
- 187
- Avg merge
- 9h 48m
- Merged PRs (30d)
- 16
Description
### 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
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.