java - mapstruct目标对象设置多次而不是更新

标签 java mapping mapstruct

下面是我的映射器界面。我正在使用mapstruct 1.3.0.Final

@Mapper(componentModel = "spring")
public interface ApiMapper {
    @Mappings({
        @Mapping(source = "in.entityName.fn", target="name.fn"),
        @Mapping(source = "in.entityName.ln", target="name.ln"),
        @Mapping(source = "in.salute.sln", target="name.salutation"),
    })
    public MyOutput map(InputData in);
}

它看起来非常简单,但是实现类在目标中设置了两次name对象,所以我只得到最后一个映射的对象。有人可以帮助我理解我在这里遗漏了什么或做错了什么吗?

@Component
public class ApiMapperImpl implements ApiMapper {

    @Override
    public MyOutput map(InputData in) {
        if ( in == null ) {
            return null;
        }

        MyOutput myOutput = new MyOutput();

        myOutput.setName( entityNameToNameDetails( in.getEntityName() ) );
        myOutput.setName( saluteServiceOutputToNameDetails( in.getSalute() ) );

        return myOutput;
    }

    protected NameDetails entityNameToNameDetails(EntityName entityName) {
        if ( entityName == null ) {
            return null;
        }

        NameDetails nameDetails = new NameDetails();

        nameDetails.setFn( entityName.getFn() );
        nameDetails.setLn( entityName.getLn() );

        return nameDetails;
    }

    protected NameDetails saluteServiceOutputToNameDetails(SaluteServiceOutput saluteServiceOutput) {
        if ( saluteServiceOutput == null ) {
            return null;
        }

        NameDetails nameDetails = new NameDetails();

        nameDetails.setSalutation( saluteServiceOutput.getSln() );

        return nameDetails;
    }
}

最佳答案

我认为,您应该在这种情况下帮助映射结构,添加一个简单的方法,例如:

@Mappings({
    @Mapping(source = "in.entityName.fn", target="fn"),
    @Mapping(source = "in.entityName.ln", target="ln"),
    @Mapping(source = "in.salute.sln", target="salutation"),
})
public NameDetails mapNameDetails(InputData in);`

关于java - mapstruct目标对象设置多次而不是更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59307586/

相关文章:

java - Android 中的 SharedPref 在按下按钮时不保存数据

java - MapStruct 问题绑定(bind)到具有 getter 和 Builder 类的类

java - AspectJ 可以遍历 sun.net.* 包吗?

java - jackson JsonMappingException : Invalid type id

elasticsearch - Elasticsearch-映射VS映射?

javascript - Rxjs 将 Json 文档中的数组映射到新的数组类型

functional-programming - Erlang 映射中的模式匹配键

Java 类型-细化映射

java - MapStruct 根据目标类型映射正确的对象实例

使用 NetBeans 6.X 框架进行 Java/Swing GUI 编程