5

When using constructor generated by newest Lombok v1.6.20, Jackson is not able to use the constructor.

For example, when deserializing

@Data
@AllArgsConstructor
private static class TestObject {
    private Integer a;
    private String b;
}

I am getting

    com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of TestObject: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?)
 at [Source: {"a":0,"b":"0"}; line: 1, column: 2]

    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:270)
    at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:1456)
    at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1012)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1206)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:314)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:148)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3814)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2858)

It works in Lombok 1.6.18. The issue can happen when migrating to Spring Boot 2.

Lukas
  • 13,606
  • 9
  • 31
  • 40

1 Answers1

7

The reason is backward incompatible change in Lombok 1.6.20. See Lombok changelog https://projectlombok.org/changelog and this bug report https://github.com/rzwitserloot/lombok/issues/1563 for more details

The solution is to specify lombok.anyConstructor.addConstructorProperties config parameter.

Lukas
  • 13,606
  • 9
  • 31
  • 40
  • 1
    In an upcoming release, we plan to generate a private no-args constructor for data classes, allowing Jackson to use that instead. Disclosure: I am a lombok developer. – Roel Spilker Feb 13 '18 at 08:33
  • 1
    @RoelSpilker Thanks for the information, but lombok should also support `@Value` classes, eventually generating parameters so when compiled with `-parameters` compiler parameter, jackson can read those names. – bric3 Apr 05 '18 at 14:23
  • @RoelSpilker private no-args constructor does not work with lombok `@NonNull` , am I correct? – addlistener Jan 13 '20 at 01:33