【问题标题】:Mapstruct Mapper ExtensionMapstruct 映射器扩展
【发布时间】:2021-08-03 03:07:33
【问题描述】:

this 似乎适用于添加额外的方法,但不适用于在现有方法上添加新注释。假设我们有以下类:

public class SourceClass {
    private String field_1;
    private String field_2;
}

public class TargetParent {
    private String field_a;
}

public class TargetChild extends TargetParent {
    private String field_b;
}

父对象是可以由其他方扩展的框架的一部分。 子对象是添加新字段的具体扩展的示例。

我正在计划一种使用 Mapping Hierarchy 的方法,如下所示:

@Mapper
public interface ParentMapper {
    @Mapping(source="field_1", target="field_a")
    public TargetParent convert(SourceClass source);
}

@Mapper
public interface ChildMapper extends ParentMapper {
    @Mapping(source="field_2", target="field_b")
    public TargetChild convert(SourceClass source);
}

我期待看到 ChildMapper 的实现:

public TargetChild convert(SourceClass source){
    // target instanciation through factory here
    target.setField_a(field_1);
    target.setField_b(field_2);
}

但这不起作用:@Mapping 注解似乎没有被继承。

我可以尝试找出一些替代解决方案,但似乎我开始破解框架,这不是我的意图。

我错过了什么吗?

【问题讨论】:

  • 您能说得更具体些吗?您从哪个对象映射以及映射到哪个对象?
  • 感谢伊利亚的快速回复。我编辑了这个问题,使其更具体地针对我遇到的主要问题。请检查是否需要更多说明。

标签: java polymorphism mapping mapstruct class-hierarchy


【解决方案1】:

如果你想继承某些注解,你应该使用Mapping configuration inheritance

例如

@Mapper
public interface ParentMapper {
    @Mapping(source="field_1", target="field_a")
    public TargetParent convert(SourceClass source);
}

@Mapper(config = ParentMapper.class)
public interface ChildMapper {
    @Mapping(source="field_2", target="field_b")
    @InheritConfiguration
    public TargetChild convert(SourceClass source);
}

【讨论】:

  • 感谢您花时间回复 Filip。我将不得不测试我的具体场景。有答案后我会尽快回复。
猜你喜欢
  • 1970-01-01
  • 2019-07-16
  • 2020-08-02
  • 2021-11-22
  • 1970-01-01
  • 2017-11-04
  • 1970-01-01
  • 2021-02-17
  • 2021-11-28
相关资源
最近更新 更多