如果输入输出 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 注解 -- 类型转换(序列化,反序列化)、私有字段相关推荐

  1. 【Java】用Jackson进行JSON序列化/反序列化操作

    Java类和JSON Speaker类: import java.util.ArrayList; import java.util.Arrays; import java.util.List;publ ...

  2. JacksonUtils Jackson的JSON序列化反序列化

    pom.xml添加依赖 <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactI ...

  3. 2.Spring Boot 中Json的使用,Jackson注解详解

    一.前言 1.介绍 我们常在项目中使用的Json转换工具是fastjson,事实上spring本身集成了非常优秀的json工具,分别为Jackson,Gson,JSON-B,但是官方项目中默认推荐使用 ...

  4. jackson驼峰转下划线注解_jackson序列化与反序列化的应用实践

    作者 | zhouweixin 来源 | urlify.cn/iEbiAz 66套java从入门到精通实战课程分享 1 相关概念 序列化: 把对象转换为字节序列的过程称为对象的序列化 反序列化: 把字 ...

  5. Jackson之JSON序列化和多态反序列化

    SerDe是Serialize/Deserilize的简称,即序列化和反序列化. 一.Jackson之序列化和反序列化 JSON作为一种轻量级的数据交换格式,其清晰和简洁的结构能够轻松地与Java对象 ...

  6. Jackson注解学习参考

    以下内容摘录.翻译自https://github.com/FasterXML/jackson-annotations  (1)初级  我们从几个简单的使用场景开始:重命名属性,忽略属性,以及修改属性所 ...

  7. Jackson注解详解

    本文来说下Jackson中的注解. 文章目录 概述 Read + Write注解 @JsonIgnore @JsonIgnoreProperties @JsonIgnoreType @JsonAuto ...

  8. avro数据序列化/反序列化

    序列化:把数据加工成特定的格式 反序列化:把特定格式的数据解析成对象 Avro提供了两种序列化和反序列化的方式:一种是通过Schema文件来生成代码的方式,一种是不生成代码的通用方式,这两种方式都需要 ...

  9. json序列化c语言,C语言JSON序列化/反序列化

    最近想找一个C语言处理嵌套结构体和结构体数组的json库,理想的是能够很容易处理复杂结构体嵌套,并且使用简单的,但是没找到比较合适的,于是打算自己封装一个: 两个问题: C语言结构体本身没有元数据,这 ...

最新文章

  1. 体检系统前端源码_给您的前端进行健康检查
  2. [register]-ARMV8系统中通用寄存器和系统寄存器的介绍和总结
  3. 2011---2013年杭电计算机历年研究生复试---笔试编程
  4. 动态链接MFC引发的血案
  5. 7-43 币值转换 (20分)_「篮球看吧」40岁了!生涯25年!还狂砍33分+联赛得分王,这他么是人吗...
  6. wxPython:当密码账号输入正确,登录界面消失并显示主界面
  7. 百面机器学习—11.集成学习(GBDT、XGBoost)面试问题总结
  8. iOS 8 自适应 Cell
  9. 学习windows内核一
  10. vep文件转换mp4翻录教程
  11. linux集群环境搭建
  12. 基于神经网络的房价预测,BP神经网络预测房价
  13. background简写属性
  14. 很全的HTML5功能概述,温故而知新,可以为师矣!
  15. 二线城市-太原-程序员真实写照
  16. itchat4j -- 用Java扩展个人微信号的能力
  17. 屏蔽宽带运营商的弹窗广告
  18. PHP扩展undefined symbol,解决 undefined symbol: php_pdo_register_driver in Unknown on line 0
  19. SIO_KEEPALIVE_VALS 用户异常掉线检测
  20. odoo第二天,请假单,权限第一天

热门文章

  1. java 中方法重载
  2. 20180525小测
  3. 有关Java中json字符串与map的转换使用
  4. HUE配置文件hue.ini 的zookeeper模块详解(图文详解)(分HA集群)
  5. java数据结构之枚举
  6. ORA-01092: ORACLE 例程终止 强行断开连接
  7. win8 Windows 8 设置 默认浏览器
  8. wp_terms分类信息表—WordPress数据库研究(2.6.2版本)#8
  9. 在keil中使用头文件实现多文件编程
  10. Python进阶_wxpy学习:常见问题