我正在使用mapstruct
在DTO中转换域名,正在使用的映射是: -
@Mapper(componentModel = "spring", uses = {})
public interface CategoriesMapper {
@Mapping(source = "regionsid.id", target = "regionsid.id")
CategoriesDTO categoriesToCategoriesDTO(Categories categories);
}
public class Categories implements Serializable {
private Regions regionsid;
public Regions getRegionsid() {
return regionsid;
}
public void setRegionsid(Regions regions) {
this.regionsid = regions;
}
}
public class CategoriesDTO implements Serializable {
private RegionsDTO regionsid;
public RegionsDTO getRegionsid() {
return regionsid;
}
public void setRegionsid(RegionsDTO regions) {
this.regionsid = regions;
}
}
public class Regions implements Serializable {
private Long id;
}
public class RegionsDTO implements Serializable {
private Long id;
}
所以我在源端和目标端都有一些结构,但是我得到了以下错误: -
CategoriesMapper.java:28: error: Unknown property "regionsid.id" in return type.
如果我有Set
怎么办?来源 -
private Set<Regions> regions = new HashSet<>();
目标 -
private Set<RegionsDTO> regions = new HashSet<>();
CategoriesMapper.java:36: error: Can't map property "java.util.Set<com.equidity.xboard.service.dto.RegionsDTO> regions" to "java.util.Set<com.equidity.xboard.domain.Regions> regions". Consider to declare/implement a mapping method: "java.util.Set<com.equidity.xboard.domain.Regions> map(java.util.Set<com.equidity.xboard.service.dto.RegionsDTO> value)".`
答案 0 :(得分:0)
目前,MapStruct不支持嵌套属性的自动映射。为了使您的映射生效,您需要为CategoriesMapper
提供另外一种方法:
RegionsDTO regionsToRegionsDTO(Regions Regions);
答案 1 :(得分:0)
我相信最干净的方法是编写一个RegionsMapper接口,如下所示:
@Mapper(componentModel = "spring", uses = {})
public interface RegionsMapper extends EntityMapper<RegionsDTO, Regions> {
Set<Regions> map(Set<RegionsDTO> value);
}
请注意,上面的代码声明了错误消息所要求的方法。
此外,您还需要调整@Mapper批注(问题中的第一行代码),以便它使用此新的映射器:
@Mapper(componentModel = "spring", uses = {RegionsMapper})
这个问题有点老了,但是我只是使用JHipster遇到了类似的问题。