Lombok v1.6.20与Jackson不兼容。

5

当使用最新版本的Lombok v1.6.20生成的构造函数时,Jackson无法使用该构造函数。

例如,在反序列化时

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

我遇到了

    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)

Lombok 1.6.18 中有效。当迁移到 Spring Boot 2 时可能会出现此问题。

1个回答

7

1
在即将发布的版本中,我们计划为数据类生成一个私有的无参构造函数,让Jackson能够使用它。声明:我是lombok开发人员。 - Roel Spilker
1
@RoelSpilker 感谢您提供的信息,但 lombok 应该也支持 @Value 类,最终生成参数,这样在使用 -parameters 编译器参数编译时,jackson 可以读取这些名称。 - bric3
@RoelSpilker 私有的无参构造函数在使用 lombok 的 @NonNull 注解时不起作用,我的理解是正确的吗? - addlistener

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接