当前位置: 首页 > 知识库问答 >
问题:

如何使用模型映射器将泛型类型映射到集合对象?

欧阳俊逸
2023-03-14

我试图使用http://modelmapper.org/表示DAO和模型类的库-

模型类-

public class PageModel<T> {

    @JsonProperty("items")
    private List<T> items;

    @JsonProperty("meta")
    private MetaModel meta;

    public PageModel() {

    }

    public PageModel(int current, int limit) {
         this.items = new ArrayList<>();
         this.meta = new MetaModel(current, limit);
    }

    @JsonProperty("items")
    public List<T> getItems() {
        return items;
    }

    @JsonProperty("items")
    public void setItems(List<T> items) {
        this.items = items;
    }

    @JsonProperty("meta")
    public MetaModel getMeta() {
        return meta;
    }

    @JsonProperty("meta")
    public void setMeta(MetaModel meta) {
        this.meta = meta;
    }

}
public class MetaModel {
    @JsonProperty("total")
    private Integer total;

    public MetaModel() {

    }

    public MetaModel(int page, int limit) {
        this.page = new PageMetaModel(page, limit);
    }
    @JsonProperty("total")
    public Integer getTotal() {
        return total;
    }

    @JsonProperty("total")
    public void setTotal(Integer total) {
        this.total = total;
    }
}
public class SubjectModel {
    private String name;
    private StatusModel status;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public StatusModel getStatus() {
        return status;
    }

    public void setStatus(StatusModel status) {
        this.status = status;
    }
}

道类-

public class Page<T> {
    private List<T> items;
    private int count;

    public Page(List<T> items, int count) {
        if(items == null)
            throw new IllegalArgumentException("items can not be null");

        this.items = items;
        this.count = count;
    }

    public List<T> getItems() {
        return items;
    }

    public void setItems(List<T> items) {
        if(items == null)
            throw new IllegalArgumentException("items can not be null");

        this.items = items;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }
}

公共类主题{私有字符串名称;

private Integer passCount;
private Integer failCount;

public Subject(String name, Integer passCount, Integer failCount) {
    this.name = name;
    this.passCount = passCount;
    this.failCount = failCount;
}
public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Integer getPassCount() {
    return passCount;
}

public void setPassCount(Integer passCount) {
    this.passCount = passCount;
}

public Integer getFailCount() {
    return failCount;
}

public void setFailCount(Integer failCount) {
    this.failCount = failCount;
    }
}

映射逻辑

        ModelMapper modelMapper = new ModelMapper();

        modelMapper.getConfiguration()
                .setMatchingStrategy(MatchingStrategies.STRICT);

        modelMapper.addMappings(new PropertyMap<Page<?>, PageModel<?>>() {
            @Override
            protected void configure() {
                map().getMeta().setTotal(source.getCount());
            }
        });

        modelMapper.addMappings(new PropertyMap<Subject, SubjectModel>() {
            @Override
            protected void configure() {
                map().getStatus().setPassCount(source.getPassCount());
                map().getStatus().setFailCount(source.getFailCount());
            }
        });

        List<Subject> subjects = new ArrayList<>();
        subjects.add(new Subject("Subject A", 10, 20));
        subjects.add(new Subject("Subject B", 8, 7));

        Page<Subject> page = new Page<>(subjects, 10);

        Type pageType = new TypeToken<PageModel<SubjectModel>>() {}.getType();
        PageModel<SubjectModel> pageModel = modelMapper.map(page, pageType);

ModelMapper似乎不起作用,它给我pageModel提供了主题类项目,而不是主题模型类项目

共有1个答案

邢高爽
2023-03-14

我对这个问题有一个解决方案:模型映射器#380,并将在本周末发布。请看看这是否解决了您的问题。谢谢。

 类似资料:
  • 在对这个话题进行了大量的测试和研究之后,我无法完全解决我的问题。我正在springboot应用程序中使用modelmapper进行实体/DTO映射。我正在尝试配置modelmapper,将一个集合映射到一个简单的DTO对象。我已经创建了一个自定义转换器,它正在按预期工作: 我现在的问题是将此转换器应用于所有“集合”= 如果我直接在模型映射器中添加转换器,它就是不工作。 你对此有什么提示或解决办法吗

  • 我正在开发和spring应用程序,对于对象映射,我使用ModelMapper库。 我能够映射基本类映射,但当我尝试映射2个集合元素时,源是一组枚举,具有其他属性,如名称和描述,目标是具有id、名称和描述的pojo。 我已经尝试了类型地图和转换器在映射配置文件,但我得到例外的映射器。 源类来自其他应用程序(其依赖项已在pom.xml中添加)。我也不希望源类型作为目标setter中的参数。 前。 资料

  • 当我尝试通过枚举将源中的字符串映射到目标中的整数时。ModelMapper失败。 来源 目的地 字符串和整数之间的映射在枚举中定义

  • 我想将泛型类型<code>Y</code>的对象映射到另一个泛型类型为<code>X</code>的对象。在mapstruct中有这样的功能吗?或者我必须为通用映射编写自定义映射器吗?当我编译上面的代码时,会出现编译错误。

  • 我有很多实体扩展了实体,也有很多数据扩展到 我有一个通用的存储库、服务和映射器,如下所示 我的仓库: 我的服务: 我的地图绘制者: 我想在方法中从T创建一个对象,在类中从方法中从Dto创建一个对象

  • 问题内容: 我需要将obj 映射到一个类及其中的数组,并且它也应该具有所有子级数据。(也嵌套数组列表),我需要再次将更新的数据列表转换为 我的json字符串是 问题答案: 首先, 您需要创建要在其中映射JSON的类。 幸运的是,有一个网站,可以为你做它在这里 其次,您可以使用Google Gson库进行轻松映射 1.添加 依赖项 。 2.从您的对象到JSON。 3.从JSON到object。 有关