如何在MapStruct中的表达式中添加空间

问题描述

我需要将源中的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;
    }
}