【发布时间】:2012-11-18 15:52:13
【问题描述】:
我正在尝试用 Java 中的 Jersey/Jackson 反序列化一些 JSON。
这是我的 JSON 示例
{
"text":"toto",
"link":"titi",
"items":[{
"text":"toutou",
"link":"tata",
"items":[{
"text":"toto2",
"link":"toutou2",
"data":"tonti",
]}
]}
}
那么我的 Java 模型部件看起来像这样
public IItem {
...
}
public Item implements IItem {
List<IItem> items;
String text;
String link;
...
}
public ItemData extends Item {
String data;
...
}
现在,当我尝试反序列化我的 JSON 时,对象映射器不知道要使用什么具体类。 我怎么告诉他这个?问题是我想要一个 Item(带有 Item 列表(带有 ItemData 列表))。
虽然我只使用一个包含所有字段(文本、链接、数据)的对象,但我更喜欢这种看起来更好的设计。你觉得值得吗?
实际上,我有多个字段可以复制,因为 JSON 结构有点复杂,为了清楚起见,我对其进行了简化。
问题2:之后我需要在 JSON 中再次序列化我的对象(第一部分仅用于临时开发,稍后我将从 JDBC 驱动程序填充对象),我怎么知道球衣一次只显示一个级别?
即我请求/我只想要第一级,答案应该是:
{
"text":"toto",
"link":"titi",
"items":[{
"text":"toutou",
"link":"tata",
]}
}
如果我要求/tata,答案应该是:
{
"text":"toutou",
"link":"tata",
"items":[{
"text":"toto2",
"link":"toutou2",
"data":"tonti"
]}
}
(问题更多是关于如何在我的第一个请求中隐藏第二个级别,我确实了解如何处理第二个请求)。
谢谢,
【问题讨论】:
-
两个小问题,您使用的是什么 JSON 库,是否允许更改 JSON 格式?
-
我认为图书馆是杰克逊。而且我可以更改 JSON 格式,但在我看来,这是表示我正在发送的数据的最佳方式。你有什么想法 ?为对象类型添加标志?
-
是的,这就是我的建议,请参阅下面的答案。
标签: java json jersey deserialization