gpt4 book ai didi

java - Jackson 的不可变 Lombok 注释类

转载 作者:搜寻专家 更新时间:2023-10-30 21:15:14 26 4
gpt4 key购买 nike

创建类的首选方法是什么

  • 不可变
  • 可以用Jackson序列化/反序列化
  • 人类可读且样板级别低

最好,我会喜欢这样的工作:

@Data(onConstructor = @__(@JsonCreator))

然后将所有字段设为private final。但是,这甚至无法编译(我不确定为什么)。使用

@AllArgsConstructor(onConstructor = @__(@JsonCreator))

会编译但只会产生

InvalidDefinitionException: No serializer found for class

最佳答案

添加ConstructorProperties:

  • 创建一个 lombok.config 文件 in an appropriate location用线:lombok.anyConstructor.addConstructorProperties = true
  • 将 lombok @Value 注释添加到您的类中以使其不可变

然后 Jackson 的序列化和反序列化按预期工作。

这个方法:

编辑:2020-08-16

  • 注意:将@Builder@Value 一起使用会导致此解决方案失败。 (感谢下面@guilherme-blanco 的评论。)但是,如果您还添加例如@AllArgsConstructor 它仍然按预期工作。

编辑:2021-08-19

  • 注意:当您添加或更改 lombok.config 文件时,除非您进行重建(清理然后构建),否则更改不会生效。我被这个问题困扰过几次。
  • @Jacksonized annotation solution是为注释的特定类实现预期结果的另一种方法。但是,我个人更喜欢不需要记住注释每个用于反序列化的类。使用 lombok.config 可以消除这种开销。

关于java - Jackson 的不可变 Lombok 注释类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49999492/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com