Могу ли я вызвать несколько внешних сопоставителей в одном классе Java с помощью Mapstruct? - PullRequest
0 голосов
/ 15 января 2019

В настоящее время я работаю над отображением DTO, у которого есть два "sub DTOS".

например. PersonDTO имеет "firstName", "lastName", "languageDTO", "zipCodeDTO"

теперь в моем PersonMapper я хочу использовать мой "LanguageMapper" и мой "ZipCodeMapper".

но с @Mapper(uses = "") я могу вызвать только один внешний маппер для использования в моем классе.

Заранее спасибо за помощь

Вот код моего DTO

Это мой ZipCodeDTO:

class ZipCodeDTO {
    public static final String FIELD_SEPARATOR = "__";
    private String favouriteZipCode;
    private String cityName;
    private int id;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getFavouriteZipCode() {
        return favouriteZipCode;
    }

    public void setFavouriteZipCode(String favouriteZipCode) {
        this.favouriteZipCode = favouriteZipCode;
    }

    public String getCityName() {
        return cityName;
    }

    public void setCityName(String cityName) {
        this.cityName = cityName;
    }

    @Override
    public String toString() {
        return id + FIELD_SEPARATOR + favouriteZipCode + FIELD_SEPARATOR + cityName;

    }

}

и это мой PersonDTO:

class PersonDTO
{

    public static final String FIELD_SEPARATOR = "__";
    private int id;
    private String firstName;
    private String lastName;
    private PictureDTO pictureDTO = new PictureDTO();
    private ZipCodeDTO zipCodeDTO = new ZipCodeDTO();
    private List<PersonLanguageDTO> personLanguageDTOList = new ArrayList<>();

    public List<PersonLanguageDTO> getPersonLanguageDTOList() {
        return personLanguageDTOList;
    }

    public void setPersonLanguageDTOList(List<PersonLanguageDTO> personLanguageDTOList) {
        this.personLanguageDTOList = personLanguageDTOList;
    }

    public PictureDTO getPictureDTO() {
        return pictureDTO;
    }

    public void setPictureDTO(PictureDTO pictureDTO) {
        this.pictureDTO = pictureDTO;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public ZipCodeDTO getZipCodeDTO() {
        return zipCodeDTO;
    }

    public void setZipCodeDTO(ZipCodeDTO zipCodeDTO) {
        this.zipCodeDTO = zipCodeDTO;
    }
}

и это мой PersonLanguageDTO

class PersonLanguageDTO{

    public static final String FIELD_SEPARATOR = "__";
    private String knowledge;
    private int personId;
    private LanguageDTO languageDTO = new LanguageDTO();

    public String getKnowledge() {
        return knowledge;
    }

    public void setKnowledge(String knowledge) {
        this.knowledge = knowledge;
    }

    public int getPersonId() {
        return personId;
    }

    public void setPersonId(int personId) {
        this.personId = personId;
    }

    public LanguageDTO getLanguageDTO() {
        return languageDTO;
    }

    public void setLanguageDTO(LanguageDTO languageDTO) {
        this.languageDTO = languageDTO;
    }

    @Override
    public String toString() {
        return knowledge + FIELD_SEPARATOR + personId + FIELD_SEPARATOR + languageDTO;

    }
}

Это я уже пробовал

@Mapper (componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.ERROR, uses = ZipCodeMapper.class +PersonLanguageMapper.class)
public interface PersonMapper {

@Mappings({

    @Mapping(source = "zipCode" , target = "zipCodeDTO" ),
    @Mapping(source = "", target = "pictureDTO")

})

PersonDTO toDTO(Person person);
}

1 Ответ

0 голосов
/ 16 января 2019

Вы можете добавить несколько картографов в uses, если вы поместите их в массив:

@Mapper (componentModel = "spring", 
         unmappedTargetPolicy = ReportingPolicy.ERROR,
         uses = { ZipCodeMapper.class, PersonLanguageMapper.class })
public interface PersonMapper {
    // Your code here
}
...