Search before asking
Describe the bug
When deserialization uses a record with a constructor property with access=READ_ONLY, the following exception is thrown:
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Invalid type definition for type `com.company.common.vo.RuleVO`: Argument #1 of constructor [constructor for `com.company.common.vo.RuleVO` (4 args), annotations: [null] has no property name annotation; must have name when multiple-parameter constructor annotated as Creator
at [Source: (BufferedReader); line: 1, column: 1]
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:62)
at com.fasterxml.jackson.databind.DeserializationContext.reportBadTypeDefinition(DeserializationContext.java:1893)
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._addImplicitConstructorCreators(BasicDeserializerFactory.java:602)
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._constructDefaultValueInstantiator(BasicDeserializerFactory.java:301)
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.findValueInstantiator(BasicDeserializerFactory.java:222)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:262)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:151)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:415)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:350)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:621)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:188)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:28)
at com.fasterxml.jackson.databind.DeserializationContext.handleSecondaryContextualization(DeserializationContext.java:867)
at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:659)
at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:4956)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4826)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3801)
A sample record is provided bellow.
Version Information
2.15.2
Reproduction
Sample record with the issue:
public record RuleVO(
@JsonIgnore
Integer id,
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
Integer order,
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
String name,
String description,
) {}
If I remove the JsonProperty.Access.READ_ONLY from order field, a new exception is thrown indicating the argument with the issue is ...: Argument #2 of constructor [constructor for..., that is, the other field with READ_ONLY.
The object mapper is:
public static ObjectMapper customObjectMapper() {
return JsonMapper.builder()
.addModule(new JavaTimeModule())
.disable(MapperFeature.DEFAULT_VIEW_INCLUSION)
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
.build();
}
I also tried with a plain object mapper JsonMapper.builder().build() without customizations and the error is still there.
Expected behavior
In 2.14.3, it works perfectly.
Additional context
I have tested the application with 2.15.3-SNAPSHOT and 2.16.0-SNAPSHOT and the error is thrown too.
Search before asking
Describe the bug
When deserialization uses a record with a constructor property with
access=READ_ONLY, the following exception is thrown:A sample record is provided bellow.
Version Information
2.15.2
Reproduction
Sample record with the issue:
If I remove the
JsonProperty.Access.READ_ONLYfrom order field, a new exception is thrown indicating the argument with the issue is...: Argument #2 of constructor [constructor for..., that is, the other field with READ_ONLY.The object mapper is:
I also tried with a plain object mapper
JsonMapper.builder().build()without customizations and the error is still there.Expected behavior
In 2.14.3, it works perfectly.
Additional context
I have tested the application with 2.15.3-SNAPSHOT and 2.16.0-SNAPSHOT and the error is thrown too.