实体模型或 Pojo 类作为 REST API 的返回对象

Posted

技术标签:

【中文标题】实体模型或 Pojo 类作为 REST API 的返回对象【英文标题】:Entity Model or Pojo Class as a return object of REST API 【发布时间】:2019-12-09 14:53:05 【问题描述】:

我正在使用 REST API, 如果直接将模型类对象列表作为对用户的响应,是否有任何错误。 还是我需要在返回之前将那些实际模型类映射到任何 POJA 类?

例如: 如果 API 忘记了所有用户(“/Users”)

那么直接返回是不是一个好的编码方式

return userRepository.findAll();

或者需要在返回之前将其转换为任何List<UserPOJO>

或者有什么好的编码标准吗?

【问题讨论】:

【参考方案1】:

根据我的经验,通常最好将实体映射到等效的 POJO 类。

这里有几个原因:

1) 大多数时候,您不需要存储在实体中的所有数据。您只能映射响应中所需的子集。

2) 从安全的角度来看,有某种中间立场总是好的,您可以在其中过滤掉实际上不应该放入响应中的敏感数据。或者仅适用于您可以在映射期间决定的某些用户。

3) Hibernate 对象不是普通对象,它们是代理。这可能会导致不必要的延迟加载,例如 @OneToMany@ManyToMany 关系。你应该能够控制它,根据我的经验,杰克逊会加载所有可能的东西,除非你用 @JsonIgnore 注释它。

除非您正在使用一个非常简单且安全性不高的应用程序,否则我将继续使用 Hibernate 对象。但除此之外,在大多数情况下,我会选择映射。

【讨论】:

以上是关于实体模型或 Pojo 类作为 REST API 的返回对象的主要内容,如果未能解决你的问题,请参考以下文章

使用 Rest Template 交换方法将 Json 映射到 POJO 类

用简单的 POJO 或 DTO 对象替换这个持久化实体?

如何使用我自己的模型映射 REST 实体

如果 xml 元素命名约定与 POJO 属性命名约定不同,则发送到 Spring Boot REST API 的 XML 元素不会映射到 POJO

如果xml元素命名约定与POJO属性命名约定不同,则发送到Spring Boot REST API的XML元素不会映射到POJO

Android java:如何创建 POJO 并将其转换为 Cloud Firestore REST API 可接受的 JSON