在rest apis(spring)中响应个性化对象的最佳实践是啥[关闭]
Posted
技术标签:
【中文标题】在rest apis(spring)中响应个性化对象的最佳实践是啥[关闭]【英文标题】: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 并返回它。
【问题讨论】:
【参考方案1】:这绝对是要走的路。你甚至应该避免让你的实体在你的控制器上有响应对象。更重要的原因之一是您可能需要调整您的实体模型或 API 模型,但您不想修改另一个。如果您有单独的模型,您只能这样做。这个模式被命名为DTO (Data Transfer Object):
DTO 或数据传输对象是在之间传输数据的对象 进程以减少方法调用的数量。图案 最早由 Martin Fowler 在他的著作 EAA 中介绍。他解释说 该模式的主要目的是减少到服务器的往返 通过在一次调用中批量处理多个参数。 (...) 使用 DTO,我们可以从我们的领域模型构建不同的视图, 允许我们创建同一域的其他表示,但 在不影响我们的领域的情况下根据客户的需求优化它们 设计。这种灵活性是解决复杂问题的强大工具。
这与您尝试做的类似。
【讨论】:
以上是关于在rest apis(spring)中响应个性化对象的最佳实践是啥[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Spring boot:有时没有从基于 Rest Api 的服务中得到任何响应
Spring Restful API - 有时,响应时间太长