Closed
Description
Search before asking
- I searched in the issues and found nothing similar.
Describe the bug
When deserializing a record, jackson fails with
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of ... (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
It looks like jackson does not see default constructor.
Version Information
2.16.0-rc1
Reproduction
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
class TestObjectTest {
@Test
public void shouldDeserialize() throws JsonProcessingException {
TestObject testObject = new ObjectMapper().readValue("{\"text\":\"anything\"}", TestObject.class);
Assertions.assertEquals("anything", testObject.text());
}
private record TestObject(String text) {}
}
When I add compact constructor with @JsonCreator
to TestObject, it works correctly:
private record TestObject(String text) {
@JsonCreator
private TestObject {
}
}
Additional context
- It works correctly in version 2.15.3
- tested on java 21
- May be related to Exception when deserialization uses a record with a constructor property with
access=READ_ONLY
#4119