【问题标题】:Mapstruct and Lombok upgrade results in different initialization behaviorMapstruct 和 Lombok 升级导致不同的初始化行为
【发布时间】:2021-07-27 07:28:41
【问题描述】:

我最近将 Lombok 从 1.16.22 升级到 1.18.20,Spring boot 从 2.1.13 升级到 2.2.13,Mapstruct 从 1.2.0 升级到 1.4.2,并开始看到这种奇怪的行为。

@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Basket {

    ...
    private List<Discount> discounts = new ArrayList<>();

    ...

    public Basket(UUID id) {
        this.id = id;
    }

在升级之前,当调用单参数构造函数时,“折扣”将使用空的 ArrayList 进行初始化。但是,现在我看到“折扣”的初始值为 null。我正在尝试缩小升级或导致这种行为变化的事情的范围,但我不知道从哪里开始。当我调用单参数构造函数时,我既没有使用映射器逻辑,也没有使用生成的构造函数。有没有人遇到过类似的问题?

【问题讨论】:

  • MapStruct 通过生成.java 文件来工作。您可以检查它们,看看它们是否在做类似明确设置这些值的操作。
  • 这看起来很奇怪。你有没有尝试在课堂上delombok?
  • 尝试将@Builder.Default@Singular 放在discounts 上。

标签: java spring spring-boot lombok mapstruct


【解决方案1】:

是的,在尝试使用 mapstruct 和 lombok 时遇到了类似的问题,我们遇到了 mapstruct 无法使用 .java 文件创建映射的问题。

这是由于 lombok @Builder 注释。 Lombok 在编译时也会生成这些方法、构造函数和构建器,但 mapstruct 没有找到。 我的两分钱是通过用您自己的第一个和调试替换 lombok 注释 impl 来进行调试。

【讨论】:

    猜你喜欢
    • 2021-05-26
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多