在对该主题进行了大量测试和研究之后,我无法完全解决我的问题。我在springboot应用程序中将modelmapper用于实体/ DTO映射。我正在尝试配置我的模型映射器以将Set映射到简单的DTO对象。我已经创建了一个自定义转换器,它可以按预期工作:
Converter<Set<CategoryTl>, CategoryTlDTO> converter = new AbstractCustomConverter<Set<CategoryTl>, CategoryTlDTO>() {
@Override
protected D convert(S source, MappingContext<Set<CategoryTl>, CategoryTlDTO> context) {
HashMap<String, CategoryTlDetailsDTO> map = new HashMap<>();
source.forEach(
categoryTl -> map.put(categoryTl.getCatalogLanguage().getLanguage().getCode(),
new CategoryTlDetailsDTO(categoryTl.getName(), categoryTl.getDescription()))
);
return new CategoryTlDTO(map);
}
};
我的问题是现在将此转换器应用于所有“设置=> CategoryTlDTO”。是否在嵌套对象中。我尝试创建一个新的TypeMap,但是由于有“ Set”集合,所以无法执行。
mapper.createTypeMap(Set<CategoryTl>.class (-> not possible), CategoryTlDTO.class).setConverter(converter);
如果我直接将转换器添加到模型映射器中,那将不起作用。
mapper.addConverter(converter);
您对此有任何提示或解决方案吗?也许我错过了有关TypeToken和TypeMap继承的知识。
最诚挚的问候,
答案 0 :(得分:0)
我还没有使用ModelMapper,但是docs建议您可以使用TypeToken
Type setType = new TypeToken<Set<CategoryTl>>() {}.getType();
mapper.createTypeMap(setType, CategoryTlDTO.class).setConverter(converter);