问题描述
我需要将源中的firstName和lastName添加到目标中的fullName。我希望名字和姓氏之间用空格隔开。但是我无法为此编写适当的映射。
我的来源和目标课程-
public class Source {
private int id;
private String firstName;
private String lastName;
private List<String> addressList;
}
public class Target {
private int id;
private String fullName;
private String city;
}
这是我的映射器界面-
@Mapper
public interface SourceTargetMapper {
SourceTargetMapper INSTANCE = Mappers.getMapper(SourceTargetMapper.class);
@Mapping(expression = "java(source.getFirstName()+source.getLastName())",target = "fullName")
@Mapping(expression = "java(source.getAddressList().get(0))",target = "city")
Target sourcetoTarget(Source source);
@InheritInverseConfiguration
Source targetToSource(Target target);
}
@Mapping(expression = "java(source.getFirstName()+" "+source.getLastName())",target = "fullName")
解决方法
您需要转引引号"
。
例如
@Mapping(expression = "java(source.getFirstName()+ \" \" +source.getLastName())",target = "fullName")
,
我找到了另一种使用装饰器模式编写Mapping的方法,如Map Struct文档中所提到的,使用装饰器模式。
我将在此处复制粘贴链接和示例。
https://mapstruct.org/documentation/dev/reference/html/#customizing-mappers-using-decorators
这是从mapstruct文档获取的代码-
@Mapper
@DecoratedWith(PersonMapperDecorator.class)
public interface PersonMapper {
PersonMapper INSTANCE = Mappers.getMapper( PersonMapper.class );
PersonDto personToPersonDto(Person person);
AddressDto addressToAddressDto(Address address);
}
public abstract class PersonMapperDecorator implements PersonMapper {
private final PersonMapper delegate;
public PersonMapperDecorator(PersonMapper delegate) {
this.delegate = delegate;
}
@Override
public PersonDto personToPersonDto(Person person) {
PersonDto dto = delegate.personToPersonDto( person );
dto.setFullName( person.getFirstName() + " " + person.getLastName() );
return dto;
}
}