MapStruct @SubclassMapping 鉴别器字段

问题描述 投票:0回答:1

我正在创建一个从我的实体类到由开放标准 OSDM 设计的 API 资源类的 MapStruct 映射器,我必须遵守它的规范。

我有一个实体

Leg
具有鉴别器属性
LegType type
.

然而,目标

TripLeg
类看起来像这样:

public class TripLeg {
  private TimedLeg timedLeg;
  private TransferLeg transferLeg;
  public ContinuousLeg continuousLeg;
}

我的目标是根据

Leg.type
值填充其中一个字段。

但是,

@SubclassMapping
不带任何标识符字段或表达式。

我找到了唯一的解决方案来装饰 LegMapper 并编写基于鉴别器属性并选择三个腿子类映射器的自定义逻辑。

有没有一种声明式的方式来实现这一点?不需要相反方向的映射。

mapstruct
1个回答
0
投票

只有在发布问题并寻找更多相关答案后,我才找到解决方案。映射属性

conditionQualifiedByName
和命名条件方法是解决方案。

@Mapper
public interface LegMapper {
    @Condition
    @Named("TimedLeg")
    default boolean isTimedLeg(Leg leg) {
        return leg != null && leg.getLegType().equals("TransitLeg");
    }

    @Mapping(source = ".", target = "timedLeg", conditionQualifiedByName = "TimedLeg")
    TripLeg toResource(Leg);
}
© www.soinside.com 2019 - 2024. All rights reserved.