java - 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;
}
}
解决方案
我认为,您应该在这种情况下帮助 mapstruct,添加一个简单的方法,例如:
@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);`
推荐阅读
- ios - Swift 4:UITableView 数据源不工作
- c# - 使用 SignalR 为内部服务创建安全连接
- javascript - Javascript photoshop 脚本使用快速选择从绿屏背景中分离前景对象
- c++ - 与地图 C++ 相比,无序地图运行异常缓慢
- java - Spring 在第一个 500 错误之后不断抛出相同的错误
- java - 变量无法解析为循环内的变量
- c# - EF 核心试图更新我没有指定的表
- java - 如何在 FXML 中将 Button 与 VBox 的底部对齐?
- javascript - 如果你知道它的属性等于什么,你怎么能找出一个对象的名字呢?
- java - 基于 Jackson 构建器的反序列化可以在构建器方法上设置 JsonLocation 吗?