java - 避免在 RESTful Web 服务中加载整个对象图

标签 java spring jakarta-ee spring-mvc jpa

我有一个使用 JPA 注释映射的域对象。 User 有许多 Question 对象(可能是 1000 个)。我必须将用户对象中问题列表的获取类型设置为eager。我在网络服务中有这样的路径:

GET/users/3

这当然会返回用户对象以及他/她编写的所有问题。 问题有其自己的关系等等......

我的担忧是获得特定用户需要花费一点时间。最好只获取一些问题,然后根据需要加载更多问题。但是,我认为我无法使用这些注释来做到这一点。那么我是否需要删除这些注释,而是手动查找特定用户的问题,然后将子集分配给该用户?

在网络服务中解决此类情况的常用方法是什么?如果提供示例/伪代码,我们将非常感激。我正在使用 Spring MVC 3.2。

最佳答案

有多种方法可以处理这个问题。以下是我所知道的一些:

  1. 不要返回整个用户,只返回他的“顶级数据”。有其他网址来获取其余数据。 EG:/users/1/questions 获取问题。
  2. 分页,正如 svz 在评论中所说。实现此目的的一种方法是让用户传入限制偏移
  3. 1 和 2 的组合。
  4. 有时,rest api 有一个可以传入的 expand=true 参数。如果该参数为 false,它将返回“顶级数据”。如果这是真的,它将返回用户及其所有问题。只有当您明确要求时,您才能获得所有数据。

关于java - 避免在 RESTful Web 服务中加载整个对象图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18451428/

相关文章:

java.security.Signature,未初始化对象以进行签名

java四舍五入到小数点后两位

java - Mockito:如何模拟方法,其结果取决于其参数之一?

java - camel 通用生产者(通过 spring xml 配置路由)

java - 所需的 Hibernate 基本资源详细信息

java - 使用 JSTL c :out ${expression} 动态评估表达式

java - 携带相同时间戳的对象的值累加

java - Thymeleaf 不使用 spring mvc 渲染

java - 非 spring web 应用程序是否可以并行 Spring-MVC 应用程序?

java - JPA Inverse Join 与 OneToMany 导致具有给定标识符的多行