下面是我的映射器界面。我正在使用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/