我有一个大对象图,我希望通过Web服务在RESTful中公开对象。所有对象都具有id属性,该属性用作该类对象中唯一的主键。此外,我的对象图中的所有关系都是双向的。将实例公开为REST资源时,我需要将实例的所有属性写入JSON;但是,我希望通过关系关联的实例仅仅由它们的id表示,而不是将整个对象序列化为JSON。
示例:所以,说一个人有狗,狗有人。
class Person {
private Integer id;
private String firstName;
private String lastName;
private Dog dog;
// public getters/setters omitted
}
class Dog {
private Integer id;
private String name;
private Person owner;
// public getters/setters omitted
}
当序列化给定的狗时,我需要结果:
{"id": 24, "name": "Fifo", "owner": 42}
在序列化给定人员时,我需要结果:
{"id": 42, "firstName": "John", "lastName": "Blogs", "dog": 24}
而不是
{"id": 24, "name": "Fifo", "owner":
{"id": 42, "firstName": "John", "lastName": "Blogs", "dog": 24}
}
和
{"id": 42, "firstName": "John", "lastName": "Blogs", "dog":
{"id": 24, "name": "Fifo", "owner": 42}
}
分别。我在getId()方法中使用了Jackson中的@JsonValue注释,但不幸的是,无论是直接序列化的对象还是通过另一个对象的关系到达对象,它都适用。
我原以为,这个用例相当普遍。如果这是不可能的,那么当通过RESTful API在对象图中公开对象时,其他人会怎么做。
谢谢。
答案 0 :(得分:2)
我想不出有一个明显的方法可以用Jackson实现这一点(有许多方法可以覆盖功能,因此可能有一种方法可以使用自定义处理程序,但这并不简单),但它听起来像一个引入用户/开发人员列表的好功能;其他人可能已经实施了解决方案,在这里找出一个声明性解决方案会很棒。
实际上我怀疑可以添加类似@JsonKey的注释来处理将单个属性用作键的简单情况。因此功能请求可能有意义。