我有一个大的对象图,我希望通过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}
在序列化给定的Person时,我需要的结果是:
{"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公开对象图中的对象时,其他人会怎么做.
谢谢.
最佳答案 我无法想到用Jackson做一些明显的方法(有许多方法可以覆盖功能,因此可能有一种方法可以使用自定义处理程序,但这并不简单),但这听起来像是一个很好的功能引入用户/开发者列表;其他人可能已经实施了解决方案,在这里找出一个声明性的解决方案会很棒.
事实上,我怀疑可以添加类似@JsonKey的注释来处理将单个属性用作键的简单情况.因此功能请求可能有意义.