java modelMapper:将集合映射到对象

时间:2018-12-13 16:04:32

标签: java spring spring-boot modelmapper

在对该主题进行了大量测试和研究之后,我无法完全解决我的问题。我在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继承的知识。

最诚挚的问候,

1 个答案:

答案 0 :(得分:0)

我还没有使用ModelMapper,但是docs建议您可以使用TypeToken

Type setType = new TypeToken<Set<CategoryTl>>() {}.getType();
mapper.createTypeMap(setType, CategoryTlDTO.class).setConverter(converter);