【问题标题】:Modelmapper with Collection and JPA具有 Collection 和 JPA 的模型映射器
【发布时间】:2016-06-13 00:52:35
【问题描述】:

我今天阅读了有关 ModelMapper 的信息,它似乎很有趣,但我不确定正确的用法。

我有一个这样的 Spring 项目: 我有序列化所需的模型类。我的 REST 控制器将 DTO 对象返回到前端。我的前端将 DTO 返回到我的控制器,然后我需要来自 DTO 的模型对象将其写入数据库。

我有一个 person 类,其属性如下:Set<Company> companies = new HashSet<Company>();

我希望模型映射器将此集合映射到一个属性:Set<String> companies = new HashSet<String>()。第二个集合应通过调用 company.getName() 来填充,而不是用整个对象填充 Set。

我的问题:

  1. 我需要 PropertyMap 还是转换器?
  2. 我该怎么做?
  3. 是否可以说从Set<Companies> 转换为单个字符串。就像我只想要一家公司一样?

抱歉,我是 ModelMapper 的新手,我正在寻找在 序列化和反序列化期间结合 spring 进行映射的最佳方法。

【问题讨论】:

    标签: java spring jpa modelmapper


    【解决方案1】:

    如果dto和bean中的字段名称相同,那么我们可以使用Spring的BeanUtils类来转换对象,如下所示:

    private UserDto toDto(User user) {
        UserDto dto = new UserDto();
        BeanUtils.copyProperties(user, dto, new String[]{"companies"});
        if (user.getCompanies() != null) {
            //Iterate the list and set the company names
        }
        return dto;
    }
    

    BeanUtils 属于org.springframework.beans 包,因此不需要依赖。如果我们想自己处理这些属性,我们可以将要忽略的属性数组作为参数传递给 copyProperties 方法(就像我们的例子中的公司)。它使用反射并调用 getter 和 setter 来设置值。

    【讨论】:

    • BeanUtils 和 ModelMapper 除了一个额外的依赖外,区别在哪里?所以我需要编写自己的匹配方法。我特别需要反序列化方面的帮助。因此,当我有一个公司名称(字符串)将其转换回公司对象时。
    • 我们如何将公司名称转换为公司对象?它需要数据库调用吗?
    • 我不明白你的问题是什么对不起...我想稍后将我的人员对象保存到数据库中。为此,我需要与我的模型相同的结构。我想将带有公司列表(表公司)的完整人员对象(表:人)写入数据库。在这种情况下,我无法将我的 DTO 写入数据库,因为它没有公司属性。
    • 我没有任何问题,伙计 :) 我只是想说,我们可能需要一个数据库调用(例如 findByName 或其他东西)来将公司名称转换为公司对象。在这种情况下,最好使用转换器设计模式(programmers.stackexchange.com/questions/185343/…)并使用 BeanUtils 来转换简单的字段。
    • 好吧,我其实希望避免再次查询数据库,因为这意味着我需要将每个类的唯一键发送到前端。当我得到前端的答案时,我需要调用数据库以获取其余数据...:/我将仔细研究这种模式。伙计。
    猜你喜欢
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 2012-12-08
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    相关资源
    最近更新 更多