Skip to content

Jackson 3 support #899

@GeorgEchterling

Description

@GeorgEchterling

DGS Codegen currently generates some jackson-databind 2 specific annotations: JsonDeserialize, JsonPOJOBuilder

Spring projects now configure Jackson 3 by default. This leads to deserialization exceptions, since Jackson 3 ignores these annotations:

org.springframework.graphql.client.GraphQlClientException: Cannot read field 'update'
	at org.springframework.graphql.client.DefaultClientResponseField.toEntity(DefaultClientResponseField.java:119) ~[spring-graphql-2.0.0.jar:2.0.0]
	...
Caused by: org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class kotlin.jvm.functions.Function0]
	at org.springframework.http.converter.AbstractJacksonHttpMessageConverter.readJavaType(AbstractJacksonHttpMessageConverter.java:363) ~[spring-web-7.0.1.jar:7.0.1]
	...
Caused by: tools.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `kotlin.jvm.functions.Function0` (no Creators, like default constructor, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information
 at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); byte offset: #54] (through reference chain: ...UpdateResult["updatedCount"])
	at tools.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:70) ~[jackson-databind-3.0.2.jar:3.0.2]
	at tools.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1958) ~[jackson-databind-3.0.2.jar:3.0.2]
	at tools.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:448) ~[jackson-databind-3.0.2.jar:3.0.2]
	at tools.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1488) ~[jackson-databind-3.0.2.jar:3.0.2]
	at tools.jackson.databind.deser.AbstractDeserializer.deserialize(AbstractDeserializer.java:254) ~[jackson-databind-3.0.2.jar:3.0.2]
	at tools.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:552) ~[jackson-databind-3.0.2.jar:3.0.2]
	at tools.jackson.databind.deser.bean.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:746) ~[jackson-databind-3.0.2.jar:3.0.2]
	at tools.jackson.databind.deser.bean.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:592) ~[jackson-databind-3.0.2.jar:3.0.2]
	at tools.jackson.databind.deser.bean.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1417) ~[jackson-databind-3.0.2.jar:3.0.2]
	at tools.jackson.databind.deser.bean.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:480) ~[jackson-databind-3.0.2.jar:3.0.2]
	at tools.jackson.databind.deser.bean.BeanDeserializer.deserialize(BeanDeserializer.java:200) ~[jackson-databind-3.0.2.jar:3.0.2]
	at tools.jackson.databind.deser.DeserializationContextExt.readRootValue(DeserializationContextExt.java:265) ~[jackson-databind-3.0.2.jar:3.0.2]
	at tools.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1646) ~[jackson-databind-3.0.2.jar:3.0.2]
	at tools.jackson.databind.ObjectReader.readValue(ObjectReader.java:1171) ~[jackson-databind-3.0.2.jar:3.0.2]
	at org.springframework.http.converter.AbstractJacksonHttpMessageConverter.readJavaType(AbstractJacksonHttpMessageConverter.java:355) ~[spring-web-7.0.1.jar:7.0.1]
	... 22 common frames omitted

In this case, I'm using the Kotlin closure syntax. (generateKotlinNullableClasses, generateKotlinClosureProjections) I'm not sure if the issue is limited to those settings.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions