首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Jersey和Jackson的子类序列化不包括额外的属性

Jersey和Jackson的子类序列化不包括额外的属性
EN

Stack Overflow用户
提问于 2011-06-16 15:29:37
回答 2查看 6.4K关注 0票数 3

在Jersey中,当使用Jackson进行JSON序列化时,不包括实现子类的额外属性。例如,给定以下类结构

代码语言:javascript
运行
AI代码解释
复制
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="@class")
@JsonSubTypes({
    @JsonSubTypes.Type(value = Foo.class, name = "foo")
}
public abstract class FooBase {
    private String bar;

    public String getBar() {
        return bar;
    }

    public void setBar( String bar ) {
        this.bar = bar;
    }
}

public class Foo extends FooBase {
    private String biz;

    public String getBiz() {
        return biz;
    }

    public void setBiz( String biz ) {
        this.biz = biz;
    }
}

和下面的Jersey代码

代码语言:javascript
运行
AI代码解释
复制
@GET
public FooBase get() {
   return new Foo();
}

我得到了下面的json

代码语言:javascript
运行
AI代码解释
复制
{"@class" => "foo", "bar" => null}

但我真正想要的是

代码语言:javascript
运行
AI代码解释
复制
{"@class" => "foo", "bar" => null, "biz" => null}

此外,在我的web.xml中,我启用了POJOMappingFeature to solve this issue

代码语言:javascript
运行
AI代码解释
复制
<init-param>
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
    <param-value>true</param-value>
</init-param>

编辑:修复了Java代码,使setter设置正确,Foo不是抽象的

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-17 17:25:41

它应该如您所示那样工作;但有一个可能的例外:如果(仅)启用JAXB注释,JAXB限制要求只使用getter/setter对来检测属性。因此,尝试为“biz”添加setter,看看是否会改变它。

这不会发生在Jackson批注中;理想情况下,如果您将Jackson和JAXB批注结合使用,也不会出现这种情况(我以为Jersey支持这两种批注)。如果还启用了Jackson注解处理,那么在'getBiz‘旁边添加@JsonProperty也应该可以做到这一点。

最后,除非您需要JAXB批注,否则可以只使用Jackson批注--在我看来,JAXB批注的主要用例是如果您需要同时生成XML和JSON,并为XML使用JAXB (通过Jersey)。否则,它们对JSON就没有用处了。

票数 3
EN

Stack Overflow用户

发布于 2011-06-22 10:40:06

通过使用POJOMappingFeature,您还可以使用JAXB注释您的类:

代码语言:javascript
运行
AI代码解释
复制
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class FooBase {
    private String bar;
}

@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
public class Foo extends FooBase {
    private String biz;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6374421

复制
相关文章
关于子类在继承父类属性和方法的基础上如何增加子类的属性和方法
如何用python程序实现子类在继承父类属性和方法的基础上同时增加子类自己的属性和方法?
算法与编程之美
2023/08/22
1940
关于子类在继承父类属性和方法的基础上如何增加子类的属性和方法
MessagePack Java Jackson Dataformat - Map 的序列化和反序列化
本测试方法,可以在 https://github.com/cwiki-us-demo/serialize-deserialize-demo-java/blob/master/src/test/java/com/insight/demo/serialize/MessagePackSerializer.java 中找到。
HoneyMoose
2019/08/10
5370
子类调用父类的同名方法和属性
在这里,定义Prentice类,继承了Master和School类,添加了和父类同名属性和方法
北山啦
2022/10/31
1.9K0
MessagePack Java Jackson Dataformat - POJO 的序列化和反序列化
在本测试代码中,我们定义了一个 POJO 类,名字为 MessageData,你可以访问下面的链接找到有关这个类的定义。
HoneyMoose
2019/08/09
5950
MessagePack Java Jackson Dataformat - Map 的序列化和反序列化
本测试方法,可以在 https://github.com/cwiki-us-demo/serialize-deserialize-demo-java/blob/master/src/test/java/com/insight/demo/serialize/MessagePackSerializer.java 中找到。
HoneyMoose
2019/08/12
4970
jackson设置读取属性时使用大写序列化属性时使用小写
jackson是一种使用广泛的json序列化库,虽然性能上可能不如fastjson,但是从其标准性以及安全性上来看(近一年爆出了不少fastjson的漏洞),下面就介绍下本文的主题,jackson序列化以及反序列化时可能用到的几个注解:
johnhuster的分享
2022/03/28
1.3K0
MongoDB(六)—-MongoDB索引的额外属性
唯一索引会保证索引对应的键不会出现相同的值,比如_id索引就是唯一索引 创建索引时也需要保证属性中内容是不重复的 语法格式:
全栈程序员站长
2021/04/07
9270
MessagePack Java Jackson Dataformat - 列表(List)的序列化和反序列化
在本测试代码中,我们定义了一个 POJO 类,名字为 MessageData,你可以访问下面的链接找到有关这个类的定义。
HoneyMoose
2019/08/09
5820
[python]父类、子类、子类实例属性
本文旨在说明 父类、子类、子类实例的属性继承关系: >>> A = type('A', (), {'name':1}) >>> B = type('B',(A,), {'addr':'beijing'})    #B的父类为A >>> A.__dict__ mappingproxy({'name': 1, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute
py3study
2020/01/19
1.9K0
Jackson父子类多态处理(注解实现)
方案一:Controller层接收的是String类型,然后通过手动的方式来进行反序列化为子类对象。
用户7741497
2022/03/24
2.9K0
MessagePack Jackson 序列化和反序列化 POJO 为 MessagePack 的数组类型
在 msgpack-java 0.6 或者早期的版本中,POJO 在 MessagePack 中被序列化和反序列化为数组变量。
HoneyMoose
2019/08/10
1.1K0
springboot主要配置文件[电脑的配置怎么看]
SpringBoot配置属性系列 SpringBoot配置属性之MVC SpringBoot配置属性之Server SpringBoot配置属性之DataSource SpringBoot配置属性之NOSQL SpringBoot配置属性之MQ SpringBoot配置属性之Security SpringBoot配置属性之Migration SpringBoot配置属性之其他 另外附上个人关于springboot的一些文章 SpringBoot前世今生
Java架构师必看
2022/03/14
6290
MessagePack Java Jackson Dataformat - 列表(List)的序列化和反序列化
在本测试代码中,我们定义了一个 POJO 类,名字为 MessageData,你可以访问下面的链接找到有关这个类的定义。
HoneyMoose
2019/08/12
5850
Dropwizard框架入门
最近项目用到了Dropwizard框架,个人感觉还不错,那么这里就从他们官网入手,然后加上自己的实现步骤让大家初步了解这个框架。 官网对DW(Dropwizard)的定义是跨越了一个库和框架之间的界限。他的目标是提供一个生产就绪的web应用程序所需的一切性能可靠的实现。那么这句话可能有些绕,我个人理解就是他能免去我们部署web应用的很多步骤。由于这个功能被提取到可以重复使用的库中,我们的应用程序保持很大程度的精简和集中,这样可以减少我们程序的上线时间和维护负担。 Jetty for HTTP 由于Web应用
庞小明
2018/03/07
3.4K0
Dropwizard框架入门
jackson配置某属性只允许反序列化但不允许序列化
实现jackson转json时忽略某字段,但json转对象时支持该字段的方式很简单:
阿超
2023/03/30
1K0
SpringBoot常用配置
前言:springboot集成了主流的第三方框架,但是需要使用springboot那一套配置方式。但是我这里只列举了非常非常常用的,可以看已发的几篇博客,慢慢会补充。当然官方文档里也有相应的配置,可惜没有注释。 mvc spring.mvc.async.request-timeout 设定async请求的超时时间,以毫秒为单位,如果没有设置的话,以具体实现的超时时间为准,比如tomcat的servlet3的话是10秒. spring.mvc.date-format 设定日期的格式,比如dd/MM/y
二十三年蝉
2018/03/29
1.3K0
Jackson 的 SNAKE_CASE 反序列化
最近项目中有关 JSON 的序列化和反序列化中,我们遇到了一个问题就是 category_id 我们在定义对象的时候使用的是 categoryId。
HoneyMoose
2023/10/07
4110
Jackson 的 SNAKE_CASE 反序列化
扩展序列化(jackson module)
Module 接口可以自定义实现一些三方类,无默认构造函数的对象,或自定义一些序列化实现。
乐事
2021/07/22
1.4K0
Jackson - LocalDateTime序列化探索
在Java开发中,涉及Json序列化及反序列化的情况有很多,最常见的就是SpringBoot/SpringCloud项目中HTTP/Rest接口的传参。其中经常会涉及到时间类型LocalDateTime的序列化和反序列化,这里经常会因为序列化失败,导致接外部接口调用或Feign调用失败。
夹胡碰
2021/06/17
3.8K0
Jackson - LocalDateTime序列化探索
Jackson 动态过滤属性,编程式过滤对象中的属性
场景:有时候我们做系统的时候,比如两个请求,返回同一个对象,但是需要的返回字段并不相同。
全栈程序员站长
2022/07/20
4.5K0

相似问题

Jackson序列化使用Jackson和Spring DBRef生成额外的目标属性

10

子类的Jackson序列化

20

jersey (+ jackson)映射字段序列化

20

Jersey Jackson序列化父字段

11

Jersey / Jackson类对象序列化

218
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文