MapStruct @SubclassMapping by discriminator field



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

我有一个具有鉴别符属性LegType type的实体Leg

然而,目标TripLeg类看起来像这样:

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

我的目标是根据Leg.type值填充其中一个字段。

但是,@SubclassMapping不取任何除数域或表达式。

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

是否有一种声明性的方式来实现这一点?不需要反向映射

只有在发布问题并寻找更多相关答案后,我才找到了解决方案。映射属性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);
}

相关内容

  • 没有找到相关文章

最新更新