我正在开发一个公开 REST API 的 Spring Boot Web 应用程序,但我在 JSON 序列化方面遇到了问题。
假设我有两个类 A 和 B,它们是一对多的双向关系。
这意味着我有这样的事情:
public class A {
private List<B> bList;
...
}
和
public class B {
private A owner;
...
}
当涉及到 JSON 序列化这个时,当然有一个循环。
这是我的问题:
- 在关注的 API 方法中
A
(例如“给我数据库中所有 As 的列表”),我想要一个 JSON 序列化,其中:A
对象确实包含B
s的列表B
对象不包含其 A 所有者
- 在专注于
B
(例如“给我数据库中所有B
s 的列表”)的 API 方法中,我想要一个 JSON 序列化,其中:A
对象不包含其B
s的列表B
对象确实包含它们的A
所有者
我相信我可以让它与@JsonView
注释一起使用,但我认为这不是一个优雅的解决方案。在我的应用程序(有两个以上的类)中,我需要创建和管理至少 4 或 5 个 JsonView:所以在我的模型类中,对于每个属性,我都必须管理一堆乱七八糟的@JsonView
注释。相反,我认为模型类不应该意识到它们具有不同的 JSON 表示,具体取决于 API 方法。
我搜索了如何使用自定义 JSON 序列化程序,发现 Jackson 允许使用其 SimpleModule 来做到这一点。然而,SimpleModule 似乎不允许根据具体情况选择使用哪个序列化器(它总是使用最后添加的序列化器)。
所以我现在有点不知所措。有人知道一种让控制器选择如何序列化类的干净方法吗?