Jackson 注解 -- 类型转换(序列化,反序列化)、私有字段
如果输入输出 JSON 时需要类型转换,我们可以使用注解 @JsonDeserialize 和 @JsonSerialize
package shangbo.jackson.demo17;import com.fasterxml.jackson.databind.ObjectMapper;public class App {public static void main(String[] args) throws Exception {// 实例化 ObjectMapper 对象ObjectMapper objectMapper = new ObjectMapper();// 将对象转成 jsonString json = objectMapper.writeValueAsString(newPerson());System.out.println(json);// 将 json 转成对象Person shangbo = objectMapper.readValue(json, Person.class);System.out.println(shangbo);}private static Person newPerson() {Person shangbo = new Person();shangbo.setFirstname("Bo");shangbo.setLastname("Shang");shangbo.setIsMale(true);return shangbo;}
}
package shangbo.jackson.demo17;import org.apache.commons.lang3.builder.ToStringBuilder;import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;public class Person {private String firstname;private String lastname;@JsonDeserialize(using = BooleanToIntDeserializer.class)@JsonSerialize(using = BooleanToIntSerializer.class)private Boolean isMale;public String toString() {return ToStringBuilder.reflectionToString(this);}public String getFirstname() {return firstname;}public void setFirstname(String firstname) {this.firstname = firstname;}public String getLastname() {return lastname;}public void setLastname(String lastname) {this.lastname = lastname;}public Boolean getIsMale() {return isMale;}public void setIsMale(Boolean isMale) {this.isMale = isMale;}
}
package shangbo.jackson.demo17;import java.io.IOException;import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;public class BooleanToIntDeserializer extends JsonDeserializer<Boolean> {@Overridepublic Boolean deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {String val = p.getText();if("0".equals(val)) {return false;}return true;}}
package shangbo.jackson.demo17;import java.io.IOException;import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;public class BooleanToIntSerializer extends JsonSerializer<Boolean> {@Overridepublic void serialize(Boolean value, JsonGenerator gen, SerializerProvider serializers) throws IOException {if(value) {gen.writeNumber(1);} else {gen.writeNumber(0);}}}
默认情况下,没有 setter 和 getter 方法的字段不会被输出,我们也可以使用注解 @JsonAutoDetect 设置可见性
。
package shangbo.jackson.demo18;import org.apache.commons.lang3.builder.ToStringBuilder;import com.fasterxml.jackson.annotation.JsonAutoDetect;@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
public class Person {private Integer id = 0;private String firstname;private String lastname;public String toString() {return ToStringBuilder.reflectionToString(this);}public String getFirstname() {return firstname;}public void setFirstname(String firstname) {this.firstname = firstname;}public String getLastname() {return lastname;}public void setLastname(String lastname) {this.lastname = lastname;}
}
package shangbo.jackson.demo18;import com.fasterxml.jackson.databind.ObjectMapper;public class App {public static void main(String[] args) throws Exception {// 实例化 ObjectMapper 对象ObjectMapper objectMapper = new ObjectMapper();// 将对象转成 jsonString json = objectMapper.writeValueAsString(newPerson());System.out.println(json);}private static Person newPerson() {Person shangbo = new Person();shangbo.setFirstname("Bo");shangbo.setLastname("Shang");return shangbo;}
}
原文链接:https://blog.csdn.net/shangboerds/article/details/90572693
Jackson 注解 -- 类型转换(序列化,反序列化)、私有字段相关推荐
- 【Java】用Jackson进行JSON序列化/反序列化操作
Java类和JSON Speaker类: import java.util.ArrayList; import java.util.Arrays; import java.util.List;publ ...
- JacksonUtils Jackson的JSON序列化反序列化
pom.xml添加依赖 <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactI ...
- 2.Spring Boot 中Json的使用,Jackson注解详解
一.前言 1.介绍 我们常在项目中使用的Json转换工具是fastjson,事实上spring本身集成了非常优秀的json工具,分别为Jackson,Gson,JSON-B,但是官方项目中默认推荐使用 ...
- jackson驼峰转下划线注解_jackson序列化与反序列化的应用实践
作者 | zhouweixin 来源 | urlify.cn/iEbiAz 66套java从入门到精通实战课程分享 1 相关概念 序列化: 把对象转换为字节序列的过程称为对象的序列化 反序列化: 把字 ...
- Jackson之JSON序列化和多态反序列化
SerDe是Serialize/Deserilize的简称,即序列化和反序列化. 一.Jackson之序列化和反序列化 JSON作为一种轻量级的数据交换格式,其清晰和简洁的结构能够轻松地与Java对象 ...
- Jackson注解学习参考
以下内容摘录.翻译自https://github.com/FasterXML/jackson-annotations (1)初级 我们从几个简单的使用场景开始:重命名属性,忽略属性,以及修改属性所 ...
- Jackson注解详解
本文来说下Jackson中的注解. 文章目录 概述 Read + Write注解 @JsonIgnore @JsonIgnoreProperties @JsonIgnoreType @JsonAuto ...
- avro数据序列化/反序列化
序列化:把数据加工成特定的格式 反序列化:把特定格式的数据解析成对象 Avro提供了两种序列化和反序列化的方式:一种是通过Schema文件来生成代码的方式,一种是不生成代码的通用方式,这两种方式都需要 ...
- json序列化c语言,C语言JSON序列化/反序列化
最近想找一个C语言处理嵌套结构体和结构体数组的json库,理想的是能够很容易处理复杂结构体嵌套,并且使用简单的,但是没找到比较合适的,于是打算自己封装一个: 两个问题: C语言结构体本身没有元数据,这 ...
最新文章
- 体检系统前端源码_给您的前端进行健康检查
- [register]-ARMV8系统中通用寄存器和系统寄存器的介绍和总结
- 2011---2013年杭电计算机历年研究生复试---笔试编程
- 动态链接MFC引发的血案
- 7-43 币值转换 (20分)_「篮球看吧」40岁了!生涯25年!还狂砍33分+联赛得分王,这他么是人吗...
- wxPython:当密码账号输入正确,登录界面消失并显示主界面
- 百面机器学习—11.集成学习(GBDT、XGBoost)面试问题总结
- iOS 8 自适应 Cell
- 学习windows内核一
- vep文件转换mp4翻录教程
- linux集群环境搭建
- 基于神经网络的房价预测,BP神经网络预测房价
- background简写属性
- 很全的HTML5功能概述,温故而知新,可以为师矣!
- 二线城市-太原-程序员真实写照
- itchat4j -- 用Java扩展个人微信号的能力
- 屏蔽宽带运营商的弹窗广告
- PHP扩展undefined symbol,解决 undefined symbol: php_pdo_register_driver in Unknown on line 0
- SIO_KEEPALIVE_VALS 用户异常掉线检测
- odoo第二天,请假单,权限第一天