JackJson和FastJson

前言:

fastjson是一款强大的json格式转换工具,我个人在开发中就非常喜欢用fastjson;但是由于某些原因,导致fastjson会有一些漏洞,因此在漏洞扫描后需要修复都是要求我们升级版本,或者替换为jackjson;fastjson漏洞提示如下:

1.将 FastJSON 升级到 1.2.83 及以上版本,或noneautotype版本,下载地址:https://repo1.maven.org/maven2/com/alibaba/fastjson/
2.临时修复建议:开启了autoType功能的受影响用户可通过关闭autoType来规避风险,另建议将JDK升级到最新版本。
   由于autotype开关的限制可被绕过,请受影响用户升级到FastJSON 1.2.68及以上版本,通过开启safeMode配置完全禁用autoType。三种配置SafeMode的方式如下:
  1)在代码中配置: ParserConfig.getGlobalInstance().setSafeMode(true);
  2)加上JVM启动参数: -Dfastjson.parser.safeMode=true (如果有多个包名前缀,可用逗号隔开)
  3)通过类路径的fastjson.properties文件来配置: fastjson.parser.safeMode=true

因此我这里来做一个fastjson和jackjson的使用方法,和一些对比;

Fastjson vs Jackson

设计方案

fastjson 和 Jackson 这两个库的设计方案存在差异。fastjson 采用的是完全基于注解(Annotation)的方式来标识某个 Java 对象属性是否需要序列化或者反序列化。而 Jackson 则采用了 Mixin 和 PropertyNamingStrategy 这两种技术。

序列化和反序列化

fastjson 和 Jackson 在序列化和反序列化过程中也有细微的区别。fastjson 的序列化和反序列化速度比 Jackson 要快得多。fastjson 可以通过一些配置选项来进一步优化性能,比如关闭循环引用检测、添加类型信息等。相比之下,Jackson 的性能会随着数据规模的增长而呈现出指数级增长。

使用方法

FastJson

1.添加 fastjson 依赖到项目中:
 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.68</version></dependency>
2.使用示例:
 public class User {@JSONField(name = "username")private String username;@JSONField(name = "age")private int age;...}// 序列化User user = new User();user.setUsername("John");user.setAge(25);String jsonStr = JSON.toJSONString(user);System.out.println(jsonStr);// 反序列化String jsonStr = "{\"username\":\"John\",\"age\":25}";User user = JSON.parseObject(jsonStr, User.class);System.out.println(user.getUsername() + " " + user.getAge());

JackJson

1.添加 Jackson 依赖到项目中:
 <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.5</version></dependency>
2.在类上使用注解即可:
 class UserMixin {@JsonProperty("username")private String username;@JsonProperty("age")private int age;}public class User {private String username;private int age;...}ObjectMapper objectMapper = new ObjectMapper();objectMapper.addMixIn(User.class, UserMixin.class);objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);// 序列化User user = new User();user.setUsername("John");user.setAge(25);String jsonStr = objectMapper.writeValueAsString(user);System.out.println(jsonStr);// 反序列化String jsonStr = "{\"username\":\"John\",\"age\":25}";User user = objectMapper.readValue(jsonStr, User.class);System.out.println(user.getUsername() + " " + user.getAge());
3.注意:

如果你想在使用 Jackson 的 ObjectMapper 转换对象为 Map 时,忽略空值字段,可以通过配置 ObjectMapper 的一些特性来实现。

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
Map<String, Object> updateMap = objectMapper.convertValue(dto, Map.class);

在上述代码中,使用 setSerializationInclusion() 方法将属性为 null 的字段排除在转换过程之外。JsonInclude.Include.NON_NULL 表示将属性值为 null 的字段排除。

这样,在转换时,只会包含非空字段的键值对。

总结:

Fastjson 和 Jackson 都是非常好用的 JSON 库,但它们在设计方案、实现方式以及使用方法上存在一些差异。如果你需要一个功能丰富的 JSON 库,同时对性能要求较高,且要求轻便快捷操作简单的话,那么Fastjson 可能更适合你;而如果你更侧重于代码可读性和可维护性,Jackson 可能是更好的选择。无论哪个库,都需要根据具体业务场景和需求来选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/100206.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用uwsgi部署Flask

安装 这里直接使用包管理器提供的版本&#xff0c;不过建议大家使用pip来安装&#xff0c;会少一些坑&#xff1a; (Debian/Ubuntu) apt-get install uwsgi uwsgi-plugin-python3 或使用pip安装&#xff1a; pip3 install uwsgi 试试看 [demo.py] from flask import Flas…

cesium图标漂移分析与解决

漂移现象如下 什么是图标漂移&#xff1f; 随着视野改变&#xff0c;图标相对于地面发生了相对位置的变化 让人感觉到图标有飘忽不定的感觉 原因分析 图标是静止的&#xff0c;它的位置在世界坐标系中是绝对的、静止的。 漂移大部分的原因是&#xff1a; 透视关系发生了错…

新华三辅导笔记 2023/10/9-2023/10/13

新华三辅导笔记 一、需要用到的软件二、计算机网络概述1、计算机网络的定义和基本功能&#xff08;1&#xff09;什么是计算机网络&#xff08;2&#xff09;计算机网络的基本功能 2、&#xff08;1&#xff09;局域网、城域网和广域网&#xff08;范围划分&#xff09;&#x…

OpenCV防抖实践及代码解析笔记

视频防抖是指用于减少摄像机运动对最终视频的影响的一系列方法。摄像机的运动可以是平移&#xff08;比如沿着x、y、z方向上的运动&#xff09;或旋转&#xff08;偏航、俯仰、翻滚&#xff09;。 正如你在上面的图片中看到的&#xff0c;在欧几里得运动模型中&#xff0c;图像…

leetcode:190. 颠倒二进制位

一、题目&#xff1a; 函数原型&#xff1a; uint32_t reverseBits(uint32_t n) 解释&#xff1a;uint32是无符号int或short的别称&#xff0c;传入的参数是一个32位二进制串&#xff0c;返回值是该32位二进制串逆序后的十进制值 二、思路&#xff1a; 实际上并不需要真的去逆…

移动应用-Android-开发指南

Android-UI开发指南 Android Studio调试UI设计UI框架布局Layout文本框 android的活动Activity基本概念Activity的生命周期Activity栈创建Activity管理ActivityActivity间传递数据 FragmentAdapterRecyclerViewRecyclerView Adapter&#xff08;适配器&#xff09;事件setOnItem…

Can 通信-协议

概述 CAN 是 Controller Area Network 的缩写&#xff08;以下称为 CAN&#xff09;&#xff0c;是 ISO国际标准化的串行通信协议。 在当前的汽车产业中&#xff0c;出于对安全性、舒适性、方便性、低公害、低成本的要求&#xff0c;各种各样的电子控制系统 被开发了出来。由于…

uniapp快速入门系列(3)- CSS技巧与布局

章节三&#xff1a;CSS技巧与布局 1. uniapp中的样式编写2. 常见布局技巧与实例解析2.1 水平居中布局2.2 垂直居中布局2.3 等高布局2.4 响应式布局 3. CSS动画与过渡效果 在uniapp中&#xff0c;我们使用CSS来设置页面的样式和布局。本章将介绍一些在uniapp中常用的CSS技巧和布…

IDEA的使用(一)代码模块的导入、快捷使用、自定义 (IntelliJ IDEA 2022.1.3版本)

目录 1. IDEA项目结构 2. 模块的导入操作 2.1 正规操作 2.2 取巧操作 2.3 出现乱码 2.4 模块改名 3. 代码模板的使用 后缀补全&#xff08;Postfix Completion&#xff09;、实时模板&#xff08;Live Templates&#xff09;菜单里面什么介绍都有&#xff0c;可以自学&a…

4.02 用户中心-上传头像功能开发

详细内容请看下面地址&#xff1a; 地址&#xff1a;http://www.gxcode.top/code

使用idea创建的springboot项目报错:“java: 错误: 无效的源发行版:17”

原因&#xff1a; 您的Idea版本不支持Java 17。 解决办法&#xff1a; 方法一&#xff1a;升级idea&#xff08;pass&#xff09; 方法二&#xff1a;更改项目的源和目标发行版本&#xff08;推荐&#xff09; 打开项目&#xff0c;找到项目的根目录。打开根目录中的.idea文件…

林沛满-TCP 是如何避免被发送方分片的?

TCP 可以避免被发送方分片&#xff0c;是因为它主动把数据分成小段再交给网络层。最大的分段大小称为 MSS&#xff08;Maximum Segment Size&#xff09;&#xff0c;它相当于把 MTU 刨去 IP头和 TCP 头之后的大小&#xff0c;所以一个 MSS 恰好能装进一个 MTU 中。 图4 图 4 …

pagehelper分页查询

pagehelper分页查询 PageHelper是MyBatis框架中提供的分页插件&#xff0c;它支持Oracle、Mysql、MariaDB、SQLite、Hsqldb、PostgreSQL六种数据库。使用PageHelper可以方便地进行分页查询&#xff0c;只需在SQL查询前调用PageHelper.startPage方法并传入两个参数&#xff1a;…

唐老师讲电赛

dc-dc电源布局要点

二维数组多次排序 或 嵌套list多次排序

可以排序int[ ][ ]的顺序&#xff0c;也可以排序List<List<Integer>> 顺序 为便于理解&#xff0c;以力扣原题为例&#xff1a;1333.餐厅过滤器 原题中给了一个双重数组&#xff0c;并要求返回一个List<Integer>。 方法1&#xff1a; 会用流的&#xff0c…

存档&改造【04】二维码操作入口设置细节自动刷新设置后的交互式网格内容的隐藏

因为数据库中没有数据无法查看设置效果&#xff0c;于是自己创建了个测试数据表&#xff0c;用来给demo测试 -- 二维码操作入口设置 create table JM_QR_CODE(QR_CODE_ID NUMBER generated as identity primary key,SYSTEM_ID NUMBER(20) not null,IS_ENAB…

iceberg简介004_iceberg和其他数据湖框架的对比---​​数据湖Apache Iceberg工作笔记0004

然后来看一下iceberg和其他数据湖框架的对比这里可以看到hudi支持的多一点对吧,但是 iceberg有自己的优势,并且他们都支持timeline 也就是时间旅行对吧. 然后这个图是显示了,数据湖三剑客的开源时间,以及火热程度,可以对比一下看看.

R语言R包详解——stringr包:字符处理

R语言 R语言R包详解——stringr包&#xff1a;字符处理 一切用法皆以说明书为准&#xff0c;想要了解该包&#xff0c;请多查阅说明书或者查看底层算法。 文章目录 R语言一、安装与加载R包二、函数简介三、函数详解3.1、str_c: 字符串拼接3.2、str_trim: 去掉字符串的空格和TA…

关于Go语言的底层,Slice,map

1 Slice Slice底层实现原理 切片是基于数组实现的&#xff0c;它的底层是数组&#xff0c;它自己本身非常小&#xff0c;可以理解为对底层数组的抽象。因为基于数组实现&#xff0c;所以它的底层的内存是连续分配的&#xff0c;效率非常高&#xff0c;还可以通过索引获得数据…

win1011安装MG-SOFT+MIB+Browser+v10b

文章目录 安装MG-SOFTSNMP服务配置安装MG-SOFT启动MIB-Browser以及错误解决MIB Browser使用 安装MG-SOFT win10和win11安装基本一样&#xff0c;所以参照下面的操作即可&#xff01; SNMP服务配置 打开设置&#xff0c;应用和功能&#xff0c;可选功能&#xff0c;选择添加功…