Spring boot JPA - 没有具有 OneToMany 关系的嵌套对象的 JSON

2023-11-20

我有一个项目处理对象的一些 ORM 映射(有一些@OneToMany关系等)。

我使用 REST 接口来处理这些对象,并使用 Spring JPA 在 API 中管理它们。

这是我的 POJO 之一的示例:

@Entity
public class Flight {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private long id;
  private String name;
  private String dateOfDeparture;
  private double distance;
  private double price;
  private int seats;

  @ManyToOne(fetch = FetchType.EAGER)
  private Destination fromDestination;

  @ManyToOne(fetch = FetchType.EAGER)
  private Destination toDestination;

  @OneToMany(fetch = FetchType.EAGER, mappedBy = "flight")
  private List<Reservation> reservations;
}

发出请求时,我必须在 JSON 中指定所有内容:

{
  "id": 0,
  "reservations": [
    {}
  ],
  "name": "string",
  "dateOfDeparture": "string",
  "distance": 0,
  "price": 0,
  "seats": 0,
  "from": {
    "id": 0,
    "name": "string"
  },
  "to": {
    "id": 0,
    "name": "string"
  }
}

我更喜欢的是,实际上指定引用对象的 id,而不是它们的整个主体,如下所示:

{
  "id": 0,
  "reservations": [
    {}
  ],
  "name": "string",
  "dateOfDeparture": "string",
  "distance": 0,
  "price": 0,
  "seats": 0,
  "from": 1,
  "to": 2
}

这可能吗?有人可以给我一些关于如何做到这一点的见解吗?我只是找到有关如何做相反的教程(我已经有了的解决方案)。


对的,这是可能的。

为此,您应该在实体模型中使用一对 Jackson 注释:

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@JsonIdentityReference(alwaysAsId = true)
protected Location from;  

您的序列化 JSON 将如下所示:

{
    "from": {
        "id": 3,
        "description": "New-York"
    } 
}

像这样:

{
    "from": 3
}

正如中提到的官方文档:

@JsonIdentityReference - 可用于的可选注释 自定义对对象的引用的详细信息,其中“对象 身份”已启用(请参阅Json身份信息)

alwaysAsId = true用作标记来指示是否全部被引用 值将被序列化为 ids (true);

Note如果使用“true”值,反序列化可能需要额外的上下文信息,并且可能使用自定义 ID 解析器 - 默认处理可能不够。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring boot JPA - 没有具有 OneToMany 关系的嵌套对象的 JSON 的相关文章

  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • 如何格式化 Highcharts 的 (x,y) 对数据的日期时间

    我的序列化方法会产生如下所示的日期时间字符串 2014 07 09T12 30 41Z 为什么下面的代码不起作用 function container highcharts xAxis type datetime series data x
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • jQuery:处理 getJSON() 中的错误?

    使用 jQuery 时如何处理 500 错误getJSON http api jquery com jQuery getJSON 有几个关于错误处理的问题getJSON and https stackoverflow com questio
  • 如何格式化 Json 输出

    请帮助我如何获取 JSON 输出 如下所示 costMethod Average fundingDate 2008 10 02 fundingAmount 2510959 95 代替 type sma costMethod Average
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • GitHub Actions:如何将 toJSON() 结果传递给 shell 命令

    因此 我正在与 Github Actions 合作进行端到端测试 我正在查看的设置是让一项作业检索要测试的 url 列表 而我的第二项作业使用该列表创建一个矩阵并测试所有这些 我的问题是 当我实际运行测试脚本时 必须从命令行完成 因为我使用
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • JavaScript 相对路径

    在第一个 html 文件中 我使用了一个变量类别链接 var categoryLinks Career prospects http localhost Landa DirectManagers 511 HelenaChechik Dim0
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • 如何实现 ag-grid 行编辑的验证规则

    我目前有一个带有内联编辑的 html 表 它使用普通的 Angular Reactive Forms 包括很多验证规则 var formArray new FormArray this items map createItemFormGro
  • 如何将对象上下文传递给 jQuery.ajax JSONP 回调?

    当 ajax 提供程序预定义其回调时 我在将 javascript 对象上下文传递到 JSONP ajax 请求的回调处理程序时遇到问题 Flickr 是服务提供商 我将举一个简化的例子 function Person anId this
  • 无法对基本类型 char 调用 equals(char)

    我是编程新手 并试图完成一个基本的猜谜游戏 但我遇到了这个错误 需要一些帮助 因为我已将 猜测 设置为char 然后想将它与字符数组进行比较 但尝试了几种不同的方法 但还没有任何乐趣 它给了我底部 if 语句的错误 其中包含 guess e
  • 导入语句中的“show”和“as”有什么区别?

    有什么区别show and as在进口声明中 例如 有什么区别 import dart convert show JSON and import package google maps google maps dart as GoogleM
  • 获取每个二维数组的累积计数

    我有一般数据 例如字符串 np random seed 343 arr np sort np random randint 5 size 10 10 axis 1 astype str print arr 0 1 1 2 2 3 3 4 4
  • Xcode 6 中未创建 Swift to Objective-C 标头

    我最近一直致力于将 Swift 添加到现有项目中 以便以现实世界的方式进行尝试 将 Swift 源文件添加到项目后 我在获取 桥接头 即 Objective C 到 Swift 方面没有任何问题 But the Swift h应该公开 Sw
  • 没有记录的 Linq to Sql Sum

    我正在创建一种收集整个月累计总数的方法 问题是给定月份的某些项目可能不收费 因此不会返回任何行 我可以看到在没有数据的情况下这会如何出错 double fuelCost double from a in db EquipmentFuelLo
  • Django 脆皮表单不加载 CSS

    我在SO上看到这个问题 Django Cripy Forms 找不到 CSS 并遵循已接受答案中的所有建议 即 crispy forms 列在 INSTALLED APPS 下 我没有运行生产服务器 所以我不确定是否应用了collectst
  • 如何通过索引提取c#中字符串中的特定字符[重复]

    这个问题在这里已经有答案了 在 C 中 字符串就像数组 当您编写 str i 时 您可以在其中访问数组的 i 1 元素 类似于 C 中的内容 我不需要 indexOf 方法 因为这是不同的 我需要一些东西通过索引将字符带入字符串中 是的 您
  • 启动时将参数传递给 pyqt 线程

    当线程启动 start 时 有什么方法可以将参数传递给 QThread 吗 我在 stackoverflow 中找到了一个使用 pyqt 线程的示例 但我想知道如何传递参数 以防我希望工作线程处理我传递给其 run 函数的数据 我参考的帖子
  • 在应用程序中将 Youtube 视频保存到 iPhone

    在应用程序中播放 Youtube 视频非常简单 并且有详细的文档记录 这样做有两个问题 关闭 Youtube 播放器后 如果用户想再次播放 则必须再次等待在线流媒体 无法离线播放 在家加载视频以便在路上观看 有没有人有代码 下载 Youtu
  • 为什么使用 -lpthread 隐式声明 pthread_yield 而使用 -pthread 则一切正常?

    我在 CentOS7 中使用 gcc 编译此代码 main c include
  • 403 禁止回复 – 我应该寻找什么?

    我有一个脚本给我错误403 Forbidden error 它只是另一个脚本的副本 但不同之处在于两者都使用另一个 mysql 类来访问数据库 我的整个项目已完成 这是最后一个文件 因此我不想为单个文件再次完成整个工作 服务器日志显示客户端
  • 检查字符串是否由唯一字母组成的最简单方法?

    我需要在 Java 中检查一个单词是否由唯一字母组成 不区分大小写 由于直接解决方案很无聊 我想出了 对于字符串中的每个字符检查是否indexOf char lastIndexOf char 将所有字符添加到HashSet并检查设置大小是否
  • 使用 Qt 4.8 在全屏模式下隐藏光标?

    我在带有 OpenBox 的 ArchLinux 中 我想在 Qt 4 8 应用程序中隐藏全屏光标 我知道有关它的其他一些问题 但没有人每次都能工作 有时光标隐藏 有时不隐藏 我没能准确地理解问题发生的时间 但我认为这可能与屏幕保护程序有关
  • 如何在 Android 中重新启动 Activity? [复制]

    这个问题在这里已经有答案了 在我正在编写的应用程序中 有一部分可以让您更改窗帘设置 问题是 在重新创建活动之前 此设置不会生效 有没有办法告诉应用程序使用 onResume 方法重新启动 希望允许它保存 onSaveInstanceStat
  • 我们如何使用 POI API 读取受保护的密码 excel 文件 (.xls)

    我刚刚学习了 POI 发现 HSSF 的读取和创建 excel 文件 xls 非常简单 但是 当我想读取受密码保护的Excel时 我发现了一些问题 我花了一个小时在互联网上找到这个解决方案 请你帮我解决这个问题 如果您能给我一个代码片段 我
  • 异步网络操作永远不会完成

    我有几个异步网络操作 它们返回可能永远不会完成的任务 UdpClient ReceiveAsync不接受CancellationToken TcpClient GetStream返回一个NetworkStream这不尊重Cancellati
  • Android 中的 java.lang.ExceptionInInitializerError

    我正在尝试创建一个可以验证人脸的 Android 应用程序 但是当我尝试在模拟器上运行我的应用程序 使用 Eclipse 时 我的 logcat 中出现以下结果 06 16 14 51 24 326 E AndroidRuntime 430
  • Spring boot JPA - 没有具有 OneToMany 关系的嵌套对象的 JSON

    我有一个项目处理对象的一些 ORM 映射 有一些 OneToMany关系等 我使用 REST 接口来处理这些对象 并使用 Spring JPA 在 API 中管理它们 这是我的 POJO 之一的示例 Entity public class