java – Json Jersey反序列化:抽象类
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Json Jersey反序列化:抽象类,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1548字,纯文字阅读大概需要3分钟。
内容图文
![java – Json Jersey反序列化:抽象类](/upload/InfoBanner/zyjiaocheng/803/eed9c2de1b1840de9c6eecfa29a1b471.jpg)
我试图用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驱动程序填充对象),我怎么能告诉jersey当时只显示一个级别?
即我要求/我只想要第一级,答案应该是:
{
"text":"toto",
"link":"titi",
"items":[{
"text":"toutou",
"link":"tata",
]}
}
如果我要求/ tata答案应该是:
{
"text":"toutou",
"link":"tata",
"items":[{
"text":"toto2",
"link":"toutou2",
"data":"tonti"
]}
}
(问题更多的是关于如何在我的第一个请求中隐藏第二级,我知道如何处理第二个请求).
谢谢,
解决方法:
如果你使用Jackson,它有一个功能,允许在这种情况下正确的反序列化(多态的项目列表).您可以使用@JsonTypeInfo批注指示您希望将对象类型包含在JSON中,然后将其用于反序列化正确的实例.这是一个例子:
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class")
public IItem {
// ...
}
这将为IItem的每个序列化表示添加一个属性,称为@class,Jackson将检测并稍后使用它来反序列化正确的对象实例.
内容总结
以上是互联网集市为您收集整理的java – Json Jersey反序列化:抽象类全部内容,希望文章能够帮你解决java – Json Jersey反序列化:抽象类所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。