首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

序列化jackson设置pojo的默认类型

序列化jackson设置POJO的默认类型是通过使用Jackson的@JsonTypeInfo注解来实现的。该注解用于指定序列化和反序列化过程中,如何在JSON中保留和恢复POJO的类型信息。

通过在POJO类的父类或者接口上添加@JsonTypeInfo注解,可以指定类型信息的保存方式。具体的用法如下:

  1. 在父类或接口上添加@JsonTypeInfo注解,设置use属性为JsonTypeInfo.Id.CLASS,表示使用类的全限定名作为类型信息。
  2. 设置include属性为JsonTypeInfo.As.PROPERTY,表示将类型信息作为一个属性添加到JSON中。
  3. 设置property属性为保存类型信息的属性名,默认为"@class"

例如,下面是一个示例POJO类的父类的定义:

代码语言:txt
复制
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
public abstract class MyBaseClass {
    // 省略其他属性和方法
}

接下来,定义一个具体的POJO类继承自父类:

代码语言:txt
复制
public class MyPojo extends MyBaseClass {
    private String name;
    private int age;
    
    // 省略其他属性和方法的定义
}

在序列化和反序列化时,Jackson会根据@JsonTypeInfo注解的配置来保存和恢复POJO的类型信息。例如,将一个MyPojo对象序列化为JSON字符串:

代码语言:txt
复制
ObjectMapper objectMapper = new ObjectMapper();
MyPojo myPojo = new MyPojo();
String json = objectMapper.writeValueAsString(myPojo);
System.out.println(json);

输出的JSON字符串中,会包含类型信息:

代码语言:txt
复制
{
  "@class" : "com.example.MyPojo",
  "name" : null,
  "age" : 0
}

当需要将JSON字符串反序列化为POJO对象时,Jackson会根据JSON中的类型信息自动选择合适的类进行实例化。

推荐的腾讯云相关产品:腾讯云函数(云函数是事件驱动的无服务器计算服务,可帮助您在云端运行代码而无需购买和管理服务器),腾讯云API网关(API网关是一种管理和调度API的服务,可帮助开发者构建和部署高性能、高可用的API),腾讯云消息队列 CMQ(消息队列CMQ是腾讯云提供的分布式消息队列服务,可实现可靠异步通信),腾讯云对象存储(对象存储COS是一种海量、安全、低成本、高可靠的云存储服务),腾讯云云数据库 Redis 版(云数据库 Redis 版是腾讯云提供的缓存数据库服务),腾讯云云服务器 CVM(云服务器CVM是腾讯云提供的可随时弹性调整配置的云主机服务)。

更多产品介绍和详细信息,请访问腾讯云官方网站:腾讯云

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • spring-data PageSort类型 jackson序列化模块

    版本 springboot:3.2.2 问题 使用Page/Sort类型作为controller参数时无法被正确解析 添加jackson模块支持反序列化 注:如果项目使用了spring-cloud-openfeign-core...模块则会自动配置这两个类型序列化支持 Page import com.fasterxml.jackson.databind.Module; public class PageJacksonModule...// 混入注解(遇到Page类型序列化/反序列化时,按照PageMixIn类型注解执行) context.setMixInAnnotations(Page.class, PageMixIn.class...); } // 反序列化为 SimplePageImpl 类型 @JsonDeserialize(as = SimplePageImpl.class) // 忽略未知属性 @JsonIgnoreProperties...(ignoreUnknown = true) private interface PageMixIn {} // 实际反序列化类型 static class SimplePageImpl

    8300

    如何再Java POJO转JSON时忽略掉一些属性

    前言 在Java开发中有时候某些敏感信息我们需要屏蔽掉,不能被消费这些数据客户端知道。通常情况下我们会将其设置为null或者空字符"",其实还有其它办法,如果你使用了Jackson的话。...忽略未知属性,配置ignoreUnknown为true,默认不忽略。 允许忽略字段被序列化,配置allowGetters为true,序列化时候不会被忽略。...注解 ❝需要 Jackson 版本不低于 2.6 这个注解出镜率还是非常高,通常为了给JSON字段起别名或者设置默认值使用。...它由枚举Access定义: public enum Access { /** * 无论是序列化还是反序列化都会根据配置自动处理,默认值。...) private String secret; 使用@JsonIgnoreType 注解 这个注解是用来直接忽略类型,如果上面的UserInfo是另外一个 POJO 属性,我们不希望它被序列化和反序列化

    1.7K10

    Java避坑指南:POJO类属性建议一律为包装类型,而且不要设置任何属性默认

    ---- 【建议】POJO类属性建议一律为包装类型,而且不要设置任何属性默认值 ---- 如果在开发中,我们对POJO类属性设置默认值(包装类型显示设置默认值,基本类型编译期推导默认值),难免会遇到一些...坑:反序列化可能导致默认值可以被null覆盖 ---- 以jackson为例: package com.renzhikeji.demo; import com.fasterxml.jackson.core.JsonProcessingException...定义中,id默认值为0,当我们序列化字符串为: {"id":null,"name":null,"address":""} json字符串中id设置为null时候:结果反序列化后,id默认值就没有了...如果RPC返回该费率值时可能由于bug或其他业务原因没有设置,拿到默认值0.0就进行计算,不会进行扣费,这种扣费为0异常情况无法被感知(当然你可以把这种业务情况发报警),但是如果不用原生类型或不设置包装类型默认值...小结 ---- POJO类属性建议一律为包装类型,而且不要设置任何属性默认值,以上坑只是冰山一角。

    54610

    jackson设置读取属性时使用大写序列化属性时使用小写

    jackson是一种使用广泛json序列化库,虽然性能上可能不如fastjson,但是从其标准性以及安全性上来看(近一年爆出了不少fastjson漏洞),下面就介绍下本文主题,jackson序列化以及反序列化时可能用到几个注解...,在.net中属性命名规则是大写,但是在java中属性是遵从驼峰式命名规则,所以为了能正确解析从.net返回json数据,我们这里用到了@JsonSetter这个注解,这个注解是用在反序列化阶段...(即将json转换为队形java对象),另外一个与@JsonSetter注解配对是@JsonGetter注解,该注解是用来定义json序列化阶段,比如返回到前端属性,由于该例子中java应用返回到前端也是驼峰式命名...PS: 1、我们不仅可以定义属性大小写,还可以定义属性名字 2、json序列化过程用到@JsonGetter注解(此阶段是读取对象属性然后转换成json),反序列化用到@JsonSetter注解(...该过程是读取json然后设置对象属性) 3、如果序列化以及反序列化使用相同名字,而且与java类属性名不一致的话可以使用@JsonProperty注解

    1.2K10

    Jackson SNAKE_CASE 反序列化

    最近项目中有关 JSON 序列化和反序列化中,我们遇到了一个问题就是 category_id 我们在定义对象时候使用是 categoryId。...这是因为 jackson 提供了一个命名规则,如果你是希望进行这种类型映射的话,那么需要把命名映射规则设置为:SNAKE_CASEobjectMapper 对象初始化时候设置有 2 种设置方法,如果你希望你在...这样意思就是不管是不是全局设置了命名规则,只要用到了这个类序列化和反序列化都会使用上面的规则来进行字段映射。那种方式更好对我们当前项目来说,我们可能更加倾向使用注解方式。...延伸阅读Jackson配置方式,不仅仅只有上面我们提到,还有下面的几种方式。SNAKE_CASE:所有字母均为小写,并在名称元素之间使用下划线作为分隔符,例如 snake_case。...这个配置方式是默认配置方式。LOWER_CASE:所有字母均为小写字母,没有分隔符,例如 lowercase。KEBAB_CASE:名称元素之间用连字符分隔,例如 kebab-case。

    34630

    JSON 反序列化 Long 变 Integer 或 Double 问题

    一、背景 工作中可能会遇到对 Map 进行 JSON 序列化,其中值中包含 Long 类型数据,反序列化后强转 Long 时报类型转换异常问题。...因此不同JSON 序列化工具给出了自己默认处理行为。...三、如何解决 3.1 慎对 Map 序列化 如工作中在发送MQ 消息时很多人图方便,不想定义POJO 对象,因为这样通常需要打包比较麻烦,就将要传输给其他系统数据定义为 Map 类型,下游再根据 key...很容易造成上下游类型不一致,造成更换 JSON 反序列化工具时出现故障。 因此发送 MQ 消息时,最好给出相应 POJO 类。...3.2 反序列化自定义类 如果上游序列化是 Map, 如果类型核实清楚,我们依然可以自定义 POJO 类来反序列化

    3.4K30

    jackson学习之四:WRAP_ROOT_VALUE(root对象)

    ,主要内容如下: 关于root对象 测试用POJO序列化实战 反序列化实战 关于root对象(WRAP_ROOT_VALUE) 对于只有id和name两个字段POJO实例来说,正常序列化结果如下...就是该注解value值; root对象value如下所示,相当于不支持root对象时用来反序列化json字符串: { "id" : 1, "name" : "book" } 准备两个POJO...,唯一不同是Order2带有注解JsonRootName; 序列化 需要设置WRAP_ROOT_VALUE属性,jackson才会支持root对象,JsonRootName注解才会发挥作用,设置代码如下...(默认设置) 在没有做任何设置时候,下面这个字符串用来反序列化成Order2对象,会成功吗?...,因为jackson此时并不支持root对象: 小结:默认情况下,反序列化时json字符串不能有root对象; 反序列化(开启UNWRAP_ROOT_VALUE属性) 如果开启了UNWRAP_ROOT_VALUE

    55520

    Mybatis逆向工程pojo实现序列化接口代码

    这两天在学习一个分布式项目--淘淘商城,使用了Alibabadubbo作为通信工具,zookeeper作为register,由于dubbo是基于socket协议,所以在进行pojo传输时候报了异常...,因为pojo没有实现序列化接口,就无法进行基于二进制序列化传输。...但是很麻烦一件事是如果逆向工程生成pojo全部自己实现序列化会很麻烦,所以看了一下mybatis插件,发现有一个可以自动给所有pojo实现序列化接口和序列化版本id(example除外)。...-- 配置pojo序列化 -->                  ...-- 默认false时,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer               当为 true时,把JDBC DECIMAL 和  NUMERIC 类型解析为

    1.1K20

    特殊数据格式处理-JSON框架Jackson精解第2篇

    Jackson是Spring Boot默认JSON数据处理框架,但是其并不依赖于任何Spring 库。有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的,没有这种限制。...Properties 赋值失败处理 三、未赋值Java Bean序列化 四、日期格式化 一、从URL读取JSON数据 Jackson不仅可以将字符串反序列化为 Java POJO对象,还可以请求远程...API,获得远程服务JSON响应结果,并将其转换为Java POJO对象。...设置disable序列化特性:FAIL_ON_EMPTY_BEANS之后,会序列化为{}字符串。...,针对java中日期及相关类型Jackson序列化结果如下 {"now":1600564582571} 如果我们希望在JSON序列化及反序列化过程中,日期格式化,需要做如下处理 ObjectMapper

    1.8K22

    Jackson常用注解详解1 初级2 中级

    在有些情况下,Jackson在读入或输出一个成员属性时,所选用类型可能并不是你想要: 当读取(反序列化)时,声明类型可能是一个基本类型,但是你确切地知道应该使用实现类型(ps:也就说,我们需要反序列化后生成对象是实现类型...) 当输出(序列化)时,Jackson默认使用是给定运行时类型;但是你可能不想输出那个类型所有信息,而仅仅是它类型所囊括信息。...(typing=Typing.STATIC) public BasicType another; } 2 中级 ①使用构造器或工厂方法 在默认情况下,当由JSON数据创建相应类实例时,Jackson...Jackson在反序列化时(读取JSON数据,生成相应对象)需要这些信息,以便能正确地读取对象类型。...) Jackson默认属性发现规则将会查找到如下所述属性: 所有被public修饰字段(成员变量); 所有被public修饰getter(即形如“getXxx()”方法); 所有被public

    1.5K61
    领券