java - 我可以使用 Mapstruct 在单个 Java 类中调用多个外部映射器吗?
问题描述
我目前正在映射具有两个“子 DTOS”的 DTO。
例如。
PersonDTO
有"firstName"
,,,, "lastName"
_ "languageDTO"
_"zipCodeDTO"
现在在我的 PersonMapper 中,我想使用 my"LanguageMapper"
和 my "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);
}
解决方案
uses
如果将它们放在一个数组中,则可以添加多个 Mapper :
@Mapper (componentModel = "spring",
unmappedTargetPolicy = ReportingPolicy.ERROR,
uses = { ZipCodeMapper.class, PersonLanguageMapper.class })
public interface PersonMapper {
// Your code here
}
推荐阅读
- sql - 如何使行使用已删除行的 rowid,其 rowid 低于它们?
- python - 在 Colab TPU 上使用分布式策略训练模型
- macos - 在两台 Mac 上设置密钥后,Mac 使用 SSH 询问密码
- r - 按其值转换表中的列
- sql - Oracle SQL:如何使用“IN 或 NOT IN 或其他”关键字检查给定的员工 ID 列表中不存在哪些记录?
- javascript - 应用程序中的计数器未按预期运行
- javascript - VUEX Getter = 数组内的过滤器数组
- laravel - 如何在 laravel 项目中同时使用 web 的守卫和 api 的守卫?
- java - 最小的java文件
- python - 查找索引numpy python