【问题标题】:Can we convert entity to dto/pojo object patially?我们可以将实体转换为 dto/pojo 对象吗?
【发布时间】:2019-05-15 13:32:29
【问题描述】:

有没有办法将实体部分转换为 dto 对象?或者在 MVC 模式中使用实体、pojo/dto 和响应对象是否有任何最佳实践?

【问题讨论】:

  • 这完全是根据你的要求,所以这是你必须自己实现的东西
  • 如果您通过 Jackson 将其序列化为 JSON,您可以查看其注释,例如 @JsonView@JsonIgnore。 (还有很多)

标签: java entity getter-setter pojo


【解决方案1】:

您有几种方法。我假设你有一个网络项目。

  1. 手动映射方法。 创建 D 以手动将其映射到您的实体。这将涉及它周围的所有样板代码 - 构建器、所有参数构造器、getter、setter 任何用于填充 DTO 的方法。 不同的补水技术适用于不同的情况。构建器模式假定您将拥有一个不可变的对象。 Getter 和 Setter 被 Jackson 等框架支持。您可以决定使用 lombok、不可变或其他框架来最小化您的样板代码。
  2. 映射框架。另一种选择是使用提供的映射器,如 ObjectMapper,或者 FastMap,可能还有其他选择。这将消除您需要按照方法 1 建立的大部分手动映射。
  3. 反序列化器。这种方法的示例是 spring-data-rest ,您的存储库直接返回实体,而不是在 JSON 中序列化。使用普通的spring MVC,这会将您的实体直接返回到您的控制器层,并基于注释或其他方式(序列化程序)将其映射到您使用的网络格式JSON、XML。

这些是不同的选项。哪个最好取决于您的用例。

【讨论】:

  • 目前使用 ModelMapper 转换整个对象,但不提供部分转换。还比较了 apache BeanUtils 等。
  • @arpit_writes 您可以使用 ModelMapper 跳过属性。使用此功能。
  • 您也可以使用 provider 来提供要映射的属性子集。
【解决方案2】:

一种可能的方法是复制构造函数。下面的例子。

// entity annotations ...
public class EntityExample {

    private Long id;
    private String name;
    private Integer score;

    // getters and setters ...
}


public class DtoExample {
    private Long id;
    pricate String name;

    // For serialization and deserialization
    public DtoExample() {

    }

    public DtoExample(EntityExample entity) {
        this.id = entity.getId();
        this.name = entity.getName();
    }

    // getters and setters ...
}

【讨论】:

    猜你喜欢
    • 2017-04-04
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    相关资源
    最近更新 更多