Jackson的使用

本文介绍了Jackson库在Java项目中的应用,用于实现Java对象与JSON之间的转换。内容包括:引入Jackson依赖,创建ObjectMapper对象,使用readValue()进行JSON反序列化,writeValueAsString()进行对象序列化,以及Jackson注解的简介。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

最近公司的竞技场项目中使用了jackson来进行java对象和json的相互转换

下面来介绍一下jackson的简单使用

引入依赖

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.6</version>
        </dependency>

简单使用

第1步:创建ObjectMapper对象

创建ObjectMapper对象。它是一个可重复使用的对象。

ObjectMapper mapper = new ObjectMapper();

第2步:反序列化JSON到对象

从JSON对象使用readValue()方法来获取。通过JSON字符串和对象类型作为参数JSON字符串/来源。

//Object to JSON Conversion
Student student = mapper.readValue(jsonString, Student.class);

第3步:序列化对象到JSON

使用writeValueAsString()方法来获取对象的JSON字符串表示。

//Object to JSON Conversion		
jsonString = mapper.writeValueAsString(student);

信息配置 对mapper的设置

 //在反序列化时忽略在 json 中存在但 Java 对象不存在的属性
 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,
    false);
 //在序列化时日期格式默认为 yyyy-MM-dd'T'HH:mm:ss.SSSZ
 mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false)
 //在序列化时忽略值为 null 的属性
 mapper.setSerializationInclusion(Include.NON_NULL);
 //忽略值为默认值的属性
 mapper.setDefaultPropertyInclusion(Include.NON_DEFAULT);

Jackson的注解的使用

Jackson的常用注解

注解用法
@JsonProperty用于属性,把属性的名称序列化时转换为另外一个名称。示例: @JsonProperty(“birth_ d ate”) private Date birthDate;
@JsonFormat用于属性或者方法,把属性的格式序列化时转换成指定的格式。示例: @JsonFormat(timezone = “GMT+8”, pattern = “yyyy-MM-dd HH:mm” public Date getBirthDate()
@JsonPropertyOrder用于类, 指定属性在序列化时 json 中的顺序 , 示例: @JsonPropertyOrder({ “birth_Date”, “name” }) public class Person
@JsonCreator用于构造方法,和 @JsonProperty 配合使用,适用有参数的构造方法。 示例: @JsonCreator public Person(@JsonProperty(“name”)String name) {…}
@JsonAnySetter用于属性或者方法,设置未反序列化的属性名和值作为键值存储到 map 中 @JsonAnySetter public void set(String key, Object value) { map.put(key, value); }
@JsonIgnoreProperties此注解是类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。 写法将此标签加在model 类的类名上 ,可以多个属性也可以单个属性
@JsonIgnore用于属性或者方法上(最好是属性上),作用和上面的@JsonIgnoreProperties一样。
@JsonSerialize用于属性或者getter方法上,用于在序列化时嵌入我们自定义的代码,比如序列化一个double时在其后面限制两位小数点。
@JsonDeserialize用于属性或者setter方法上,用于在反序列化时可以嵌入我们自定义的代码,类似于上面的@JsonSerialize
@Transient如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架默认其注解为@Basic;

注: @JsonIgnore vs @Transient -difference?

在这里插入图片描述

参考资料

https://www.yiibai.com/jackson

https://developer.ibm.com/zh/articles/jackson-advanced-application/

https://blog.youkuaiyun.com/u012373815/article/details/52266609

https://stackoverflow.com/questions/29762328/jsonignore-vs-transient-difference/29762521#29762521?newreg=585c962710714560b6c3079b4b37850a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mangoBUPT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值