首页 > 编程语言 >java中使用Jackson代替fastjson进行序列化处理

java中使用Jackson代替fastjson进行序列化处理

时间:2024-11-19 15:29:09浏览次数:1  
标签:fastjson JsonNode Jackson 对象 json java 序列化 objectMapper

方法详解
这里会列出常用方法的详解,更多方法可查阅jackson api文档

ObjectMapper类是Jackson库的主要类。它提供一些功能将转换成Java对象匹配JSON结构

对象转json字符串
ObjectMapper 通过 writeValue 系列方法将 java 对象序列化为 json,并将 json 存储成不同的格式:String(writeValueAsString)、Byte Array(writeValueAsBytes)、Writer、File、OutStream、DataOutput。
ObjectMapper objectMapper = new ObjectMapper();构造ObjectMapper对象

objectMapper.writeValue(参数,obj);
//参数解析:
//File: 将对象转为json字符串,保存到指定的文件中
//Writer: 将对象转为json字符串,并将json数据填充到字符输出流中
// outputStream: 将对象转为json字符串,并将json数据填充到字节输出流中

objectMapper.writeValueAsString(obj)//将对象转为json字符

objectMapper.writeValueAsBytes(obj)//将对象转为json字符(byte数据格式)

SimpleDateFormat dateFormat = new SimpleDateFormat(“yyyy-MM-dd”);
objectMapper.setDateFormat(dateFormat);//支持时间转换成格式化的字符串

字符串转对象
ObjectMapper 通过 readValue 系列方法从不同的数据源: String、Byte Array、Reader、File、URL、InputStream 中反序列化为 java 对象。

Obj obj = objectMapper.readValue(参数, Obj.class);//json转对象
//参数可以是String,Reader,URL,File,InputStream ,Byte

json Tree模型
JsonNode 抽象类
ObjectNode 继承 JsonNode,可代替fastjson的JSONObject
ArrayNode 继承 JsonNode,可代替fastjson的JSONArray
JsonNode对象是不可变的,所以不能直接构建JsonNode实例的对象图,可以通过创建JsonNode 的子类ObjectNode实例的对象图

// JsonNode 对象
JsonNode jsonNode = objectMapper.readTree(json);

//ObjectNode对象
ObjectNode objectNode = objectMapper.createObjectNode();
objectNode.put(" “,” “);
objectNode.remove(” ");

//ObjectNode对象
ArrayNode arraynode = mapper.createArrayNode();

常用注解
@JsonIgnore 作用域属性或方法上
@JsonIgnore 用来告诉 Jackson 在序列化/反序列化时忽略该注解标注的 java pojo 属性
@JsonIgnore
private String name;

@JsonIgnoreProperties 作用在类上
@JsonIgnoreProperties 和 @JsonIgnore 的作用相同,都是告诉 Jackson 该忽略哪些属性,
不同之处是 @JsonIgnoreProperties 是类级别的,并且可以同时指定多个属性。
@JsonIgnoreProperties(value = {"字段1","字段2"})
public class Xxxx{。。。}

@JsonIgnoreType
@JsonIgnoreType 标注在类上,当其他类有该类作为属性时,该属性将被忽略
@JsonIgnoreType
public class Xxxx{。。。}

@JsonProperty
@JsonProperty 可以指定某个属性和json映射的名称。例如我们有个json字符串为{“user_name”:”xxxx”},
而java中命名要遵循驼峰规则,则为userName,这时通过@JsonProperty 注解来指定两者的映射规则即可。这个注解也比较常用。
@JsonProperty("user_name")
private String userName;
1
2
@JsonInclude
在将 java pojo 对象序列化成为 json 字符串时,使用 @JsonInclude 注解可以控制在哪些情况下才将被注解的属性转换成 json,例如只有属性不为 null 时。
@JsonInclude(JsonInclude.Include.NON_NULL)
private String username;

常用用法:
JsonJsonInclude.Include.ALWAYS 这个是默认策略,任何情况下都序列化该字段,和不写这个注解是一样的效果。
JsonJsonInclude.Include.NON_NULL 这个最常用,即如果加该注解的字段为null,那么就不序列化这个字段了。
JsonJsonInclude.Include.NON_ABSENT 这个包含NON_NULL,即为null的时候不序列化
JsonJsonInclude.Include.NON_DEFAULT 如果字段是默认值的话就不序列化。

标签:fastjson,JsonNode,Jackson,对象,json,java,序列化,objectMapper
From: https://www.cnblogs.com/abowu/p/18554974

相关文章

  • JAVA反序列化学习-CommonsCollections4(基于ysoserial)
    环境准备JDK1.8(8u421)这里ysoserial没有提及JDK版本的影响,我以本地的JDK8版本为准、commons-collections4(4.0以ysoserial给的版本为准)、javassist(3.12.1.GA)cc4.0、ClassPool<dependency><groupId>org.apache.commons</groupId><artifactId>commons-collections......
  • JAVA反序列化学习-CommonsCollections3(基于ysoserial)
    环境准备JDK1.7(7u80)、commons-collections(3.x4.x均可这里使用3.2版本)JDK:https://repo.huaweicloud.com/java/jdk/7u80-b15/jdk-7u80-windows-x64.exe<dependency><groupId>commons-collections</groupId><artifactId>commons-collections</a......
  • 聊聊springboot项目中使用jackson的一些小技巧
    前言在我们前后端联调时,很经常以json作为数据的交互格式,今天我们就来聊聊在开发springboot项目中,使用jackson进行数据渲染一些小技巧场景一:枚举-JSON互转在日常开发中我们为了避免过多的魔法值,使用枚举类来封装一些静态的状态代码。但是在将这些枚举的意思正确而全面的返回给......
  • JAVA反序列化学习-CommonsCollections2(基于ysoserial)
    环境准备JDK1.8(8u421)这里ysoserial,我以本地的JDK8版本为准、commons-collections4(4.0以ysoserial给的版本为准)、javassist(3.12.1.GA)cc4.0、ClassPool<dependency><groupId>org.apache.commons</groupId><artifactId>commons-collections4</artifactId&......
  • JAVA反序列化学习-CommonsCollections1(基于ysoserial)
    准备环境JDK1.7(7u80)、commons-collections(3.x4.x均可这里使用3.2版本)JDK:https://repo.huaweicloud.com/java/jdk/7u80-b15/jdk-7u80-windows-x64.execc3.2:<dependency><groupId>commons-collections</groupId><artifactId>commons-collection......
  • 金蝶erp反序列化RCE+哥斯拉内存马
    漏洞介绍由于金蝶云星空管理中心在处理序列化数据时,未对数据进行签名或校验,攻击手可以写入包含恶意代码的序列化数据,系统在进行反序列化时造成远程命令执行,该“管理中心“是提供给管理员使用的管理端,默认开放于8000端口。影响版本6.x版本:低于6.2.1012.47.x版本:7.0.352.16至7.......
  • 序列化和反序列化的一致性
    序列化和反序列化需要确保算法一致spring-data-redis-客户端,配置,序列化,Pipeline管道_springdataredis配置-CSDN博客   通过RedisTemplate读取Key为stringRedisTemplate的Value,   使用StringRedisTemplate读取Key为redisTemplate的Value:  ......
  • 序列化与反序列化-基本了解使用
    什么是序列化与反序列化        网络传输的数据必须是二进制数据,但调用方请求的出入参数都是对象。对象是不能直接在网络中传输的,所以我们需要提前把它转成可传输的二进制,并且要求转换算法是可逆的,这个过程我们一般叫做“序列化”。这时,服务提供方就可以正确地从二进......
  • 深入理解Jackson的@JsonCreator注解
    在Java的JSON处理库中,Jackson无疑是最流行的选择之一。它提供了强大的数据绑定功能,允许开发者轻松地在Java对象和JSON数据之间进行转换。在处理不可变对象或者需要自定义反序列化逻辑时,@JsonCreator注解显得尤为重要。本文将通过实例深入探讨@JsonCreator注解的使用,包括其在......
  • Java序列化与反序列化深度解析
    一、引言在Java开发中,序列化与反序列化是非常重要的概念和技术手段。它允许我们将对象转换为字节流以便于存储或传输,然后在需要的时候再将字节流还原为对象。这一机制在很多场景中都有着广泛的应用,例如数据持久化、分布式系统中的远程方法调用(RMI)、缓存等。本文将深入探讨......