当前位置: 首页 > 面试题库 >

ModelMapper,将实体列表映射到DTO对象列表

巫马嘉祯
2023-03-14
问题内容

我正在使用Spring MVC框架编写简单的博客Web应用程序。我愿意DTO为我的应用添加图层。

我决定使用ModelMapper框架从Entity对象转换为DTO视图中使用的对象。

我只有一个问题。在我的主页上,我正在显示博客中的帖子列表。在我看来,这只是Post(实体)对象的列表。我想更改它以将PostDTO对象列表传递给我的视图。有没有什么办法来映射ListPost对象ListPostDTO单方法调用的对象?我当时在考虑编写将对此进行转换的转换器,但是我不确定这是否是一个好方法。

另外,我使用ListsEntities在几个地方像我的网页上管理面板或评论每一个岗位的下方。

链接到GitHub存储库上我的应用程序的代码:存储库


问题答案:

您可以创建util类:

public class ObjectMapperUtils {

    private static ModelMapper modelMapper = new ModelMapper();

    /**
     * Model mapper property setting are specified in the following block.
     * Default property matching strategy is set to Strict see {@link MatchingStrategies}
     * Custom mappings are added using {@link ModelMapper#addMappings(PropertyMap)}
     */
    static {
        modelMapper = new ModelMapper();
        modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
    }

    /**
     * Hide from public usage.
     */
    private ObjectMapperUtils() {
    }

    /**
     * <p>Note: outClass object must have default constructor with no arguments</p>
     *
     * @param <D>      type of result object.
     * @param <T>      type of source object to map from.
     * @param entity   entity that needs to be mapped.
     * @param outClass class of result object.
     * @return new object of <code>outClass</code> type.
     */
    public static <D, T> D map(final T entity, Class<D> outClass) {
        return modelMapper.map(entity, outClass);
    }

    /**
     * <p>Note: outClass object must have default constructor with no arguments</p>
     *
     * @param entityList list of entities that needs to be mapped
     * @param outCLass   class of result list element
     * @param <D>        type of objects in result list
     * @param <T>        type of entity in <code>entityList</code>
     * @return list of mapped object with <code><D></code> type.
     */
    public static <D, T> List<D> mapAll(final Collection<T> entityList, Class<D> outCLass) {
        return entityList.stream()
                .map(entity -> map(entity, outCLass))
                .collect(Collectors.toList());
    }

    /**
     * Maps {@code source} to {@code destination}.
     *
     * @param source      object to map from
     * @param destination object to map to
     */
    public static <S, D> D map(final S source, D destination) {
        modelMapper.map(source, destination);
        return destination;
    }
}

并将其用于您的需求:

List<PostDTO> listOfPostDTO = ObjectMapperUtils.mapAll(listOfPosts, PostDTO.class);


 类似资料:
  • 下面是我的DTO。 源DTO 目标DTO

  • 给定: 我想把所有的车都标出来。将轮胎分为单独的轮胎板。我知道我可以做一个

  • 我需要使用MapStruct将一些实体和实体列表转换为单个DTO。此DTO包括嵌套列表。 假设,我有以下持久性支持的POJO: 以及这些实体的一些集合: DTO如下所示: 和嵌套的DTO: 除SomeLink列表外,我需要从实体映射的所有字段: 我填充的嵌套列表如下: 结果涉及大量手动转换: 有没有办法通过使用MapStruct的功能来完成同样的工作?就像这样:

  • 我正在尝试使用AutoMapper在LLBLGen实体和DTO之间创建映射。 我的DTO如下所示: ParentEntity包含一个与DTO列表同名的ChildCollection和一个Id(需要忽略其他LLBL字段)。因此,当ParentEntity映射到父d to时,它也应该将ChildCollection映射到一个子列表。 这就是我到目前为止得到的: 这会导致Id被映射,但List的计数为0

  • 我有这样的收藏:<代码>地图 所以返回将是:

  • 我正在尝试在我的应用程序中注入列表。我的Spring Boot应用程序中Java对象列表的yml文件。 我已经看到了其他类似问题的一些答案,这些问题将Yaml中的列表映射到Spring Boot中的对象列表,但我有不同的输出错误。 我的YAML文件 我还创建了Bucket类 以及我的配置类,我在其中将列表注入YAML 当Spring Boot开始执行时,我出现以下错误: 我也尝试过简单的字符串列表