在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 rest api 过滤器字段

Spring boot:有时没有从基于 Rest Api 的服务中得到任何响应

Spring Restful API - 有时,响应时间太长

如何在spring或使用junit获取rest api的执行时间(获得响应的时间)

Spring REST API,响应中的自定义实体字段

如何使用 Spring 在单元测试中模拟远程 REST API?