【问题标题】:What is the best practice to response a personalized object in rest apis (spring) [closed]在rest apis(spring)中响应个性化对象的最佳实践是什么[关闭]
【发布时间】:2021-10-11 00:24:04
【问题描述】:

在我的控制器中响应个性化对象的最佳做法是什么?

必要性示例: 我有 X 个实体,我的一个控制器需要返回一个具有其他实体特定属性的 json 对象。 创建一个名为response的包并在里面创建一个带有个性化字段的类是个好主意吗?

public class OrderItem {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private Integer quantity;

    @ManyToOne
    @JoinColumn(name= "order_id")
    private Order order;

    @ManyToOne
    @JoinColumn(name= "product_id")
    private Product product;
}
public class Product implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String description;

} 
public class ResponseOrderItems {
    @JsonIgnore
    Integer orderId;
    Integer productId;
    Integer quantity;
    String description;
}

基本上 ResponseOrderItems 它是一个“组合”来自 Product 和 OrderItems 以及其他实体的属性的类。 我应该继续将其视为响应还是实体/模型?

更多详情: 在服务层,我正在使用其他实体的属性构建 ResponseOrderItems 并返回它。

【问题讨论】:

    标签: java spring-boot api rest restful-url


    【解决方案1】:

    这绝对是要走的路。你甚至应该避免让你的实体在你的控制器上有响应对象。更重要的原因之一是您可能需要调整您的实体模型或 API 模型,但您不想修改另一个。如果您有单独的模型,您只能这样做。这个模式被命名为DTO (Data Transfer Object)

    DTO 或数据传输对象是在之间传输数据的对象 进程以减少方法调用的数量。图案 最早由 Martin Fowler 在他的著作 EAA 中介绍。他解释说 该模式的主要目的是减少到服务器的往返 通过在一次调用中批量处理多个参数。 (...) 使用 DTO,我们可以从我们的领域模型构建不同的视图, 允许我们创建同一域的其他表示,但 在不影响我们的领域的情况下根据客户的需求优化它们 设计。这种灵活性是解决复杂问题的强大工具。

    这与您尝试做的类似。

    【讨论】:

      猜你喜欢
      • 2020-09-30
      • 2023-04-10
      • 2019-10-21
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多