使用Jackon工具类完成字符串与List泛型互转替代fastjson_jackson 工具类 转list-程序员宅基地

技术标签: fastjson  java  jackson  java实用工具类  json工具类  字符串list集合互转  

简介

fastjson最近出现漏洞,名为Fastjson反序列化漏洞
2022年5月23日,fastjson 官方发布安全通报,fastjson <= 1.2.80 存在反序列化任意代码执行漏洞,在特定条件下可绕过默认autoType关闭限制,可能会导致远程服务器被攻击,风险影响较大。OSCS开源软件社区对此漏洞进行收录,漏洞信息如下:

漏洞评级:严重

影响组件:com.alibaba:fastjson

影响版本:<= 1.2.80

更多漏洞详细信息可进入OSCS社区查看:https://www.oscs1024.com/hd/MPS-2022-11320

jackson替换方案

所以尽量少用或者慎用fastjson,不知道以后还会出现什么样的漏洞,如果你一定要使用,尽量使用较新版本的,或者最高版本的比较好一点
使用jackson可以代替json字符串和List泛型互转,编写一个工具类

JackSonUtils.java

public class JackSonUtils {
    
    /**
     * json字符串转成list
     *
     * @param jsonString
     * @param cls
     * @return
     */
    private static final ObjectMapper mapper = new ObjectMapper();

    static {
    
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    }

    public static <T> List<T> jsonToList(@NonNull String jsonString, Class<T> cls) {
    

        try {
    
            return mapper.readValue(jsonString, getCollectionType(cls));
        } catch (IOException e) {
    
            throw new RuntimeException(e);
        }
    }

    public static <T> String listToString(List<T> list) {
    
        try {
    
            return mapper.writeValueAsString(list);
        } catch (JsonProcessingException e) {
    
            throw new RuntimeException(e);
        }
    }

    /**
     * Object对象转List集合
     */
    public static <T> List<T> objectToList(@NonNull Object obj, Class<T> cls) {
    
        try {
    
            String s = mapper.writeValueAsString(obj);
            return jsonToList(s, cls);
        } catch (JsonProcessingException e) {
    
            throw new RuntimeException(e);
        }
    }

    /**
     * Object对象转指定对象
     */
    public static <T> T objectToMap(@NonNull Object obj, Class<T> cls) {
    
        return  mapper.convertValue(obj,cls);
    }
    /**
     * 获取泛型的Collection Type
     *
     * @param elementClasses 实体bean
     * @return JavaType Java类型
     */
    private static JavaType getCollectionType(Class<?>... elementClasses) {
    
        return mapper.getTypeFactory().constructParametricType(List.class, elementClasses);
    }
}

然后我们就可以使用工具类里的两个方法进行互转了

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/technologist_28/article/details/125688688

智能推荐

linux 一些命令 ftp 配置等_级别3,4,5httpd ftpd-程序员宅基地

文章浏览阅读1.4w次。文章出自http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503864.htmlHadoop集群(第3期)_VSFTP安装配置  1、VSFTP简介  VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全。_级别3,4,5httpd ftpd

php安装redis扩展,以及遇到的坑_php8 ext/standard/php_smart_str.h-程序员宅基地

文章浏览阅读1k次。先说问题吧php 安装redis扩展ext/standard/php_smart_str.h: No such file or directory按照网上的教程安装了redis的扩展,执行到 编译安装 make &amp;amp;&amp;amp; make install 时,报出了这样的错误,是因为扩展不支持php7,需要我们在 github 上拉 php7 的 redis扩展git clone htt..._php8 ext/standard/php_smart_str.h

达梦数据库卸载_达梦卸载报错exception in thread "main" org.eclipse.swt.s-程序员宅基地

文章浏览阅读2.1k次。./uninstall.sh -i_达梦卸载报错exception in thread "main" org.eclipse.swt.swterror: no more han

电子电路基础——知识点(上篇)-程序员宅基地

文章浏览阅读4.8w次,点赞253次,收藏1.5k次。第一章 电路的基本概念与基本定律一、基本概念电路: 是由“用电设备或元器件(负载)”与“供电设备(电源)”,通过导线连接而构成的提供给“电荷流动”的通路。电路的组成电源:为电路工作提供能量;用电设备/元器件:在电能作用下完成电路功能;导线:连接电源和用电设备;开关:控制电源的接入等;电路的功能能量传输: 将电源的电能传输给用电设备(负载);能量转换: 将传输到负载的电能根据需要转换成其它形式的能量,如:光、声、热、机械能等;信息传输: 信息——(载体)——信号——电路_电子电路基础

webstorm开发微信小程序-程序员宅基地

文章浏览阅读6k次,点赞2次,收藏3次。寻寻觅觅,冷冷清清。找了那么多方式和插件,唯独这个感觉最好github地址:https://github.com/zxj5470/wxapp-intellij_webstorm开发微信小程序

GitHub仓库如何使用_github仓库怎么用-程序员宅基地

文章浏览阅读2k次。核心:GitHub仓库如何使用使用 GitHub 仓库(Repositories)是将代码和项目进行存储、管理和共享的基本方式。_github仓库怎么用

随便推点

PyTorch 使用Visdom训练数据可视化_pytorch 结果可视化-程序员宅基地

文章浏览阅读1k次。使用Visdom,配合浏览器在线更新各种数据,如loss以及准确度等等,甚至图像.这里提供一个简明实用的教程.安装与启动安装: pip install visdom终端启动:python -m visdom.server打开浏览器,地址栏输入http://localhost:8097/可以看到蓝色界面.如果报错需要下载我上传的一个资源进行解决:static.zip 解决visdom 浏览器蓝屏上面链接也给出了具体的操作方法编写一个最简单的绘制正弦曲线程序import ._pytorch 结果可视化

abp学习日志五(领域服务)_volo.abp.application.services updateasync 怎么没有进入重写-程序员宅基地

文章浏览阅读497次。文章目录应用 ApplicationProductServiceICrudAppService 接口遇到了麻烦应用 Application这一层更多的是逻辑运算,把Dto转化为实体,聚合根等。Dto是一个非常不错的分层,关于Dto,Vo,Do,Po的详解在第一篇已经介绍abp学习日记 初记ProductServiceusing LY.Shop.Models;using System;..._volo.abp.application.services updateasync 怎么没有进入重写的savechange

Linux查看mac地址_凝思如何查看ipmac地址-程序员宅基地

文章浏览阅读1.9k次。方式一通过ifconfig命令查看对于网口的ether字段方式二这里我要查看eth0的网口mac地址cat /sys/class/net/eth0/address[Ryan@Ryan ~]$ cat /sys/class/net/eth0/address 00:16:3e:0c:44:de/sys/class/net/目录下记录了网口的信息如果有多个网口的话会有ech开头不同数字的目录,或者支持wifi的机器会有wlan开头的目录。要查看的话就直接进去看address文件就是mac地址_凝思如何查看ipmac地址

C++入门教程:C++基础教程,含进阶-程序员宅基地

文章浏览阅读4.7k次,点赞7次,收藏67次。C++入门教程:C++基础教程,含进阶http://c.biancheng.net/cpp/biancheng/cpp/rumen/

CSS 3之图片缩放_css图片缩放-程序员宅基地

文章浏览阅读8.6k次,点赞4次,收藏8次。使用 的描述标记 和 能设置图片大小; 和 分别表示图片的高度和宽度,可以是数值或百分比,单位可以用 px,也可以是**%、em、pt**;注意: 高度属性是和宽度属性 设置要求相同;例子1:CSS 3 中,可使用属性 和 设置图片的宽度和高度,以此达到图片的缩放效果;例子 2:CSS 3 中, 和 用来设置图片宽度最大值和高度最大值; 和 的值一般是数值类型;语法格式如下所示:或在定义图片大小时,若图片默认尺寸超过了定义的大小,就以 所定义的宽度显示,二图片高度将同比例_css图片缩放

miniui自定义弹窗(mini.showMessageBox)-程序员宅基地

文章浏览阅读3.7k次。1.miniui自定义弹窗 (mini.showMessageBox)//自定义弹窗 mini.showMessageBox({ title: "请选择您要的饮品", buttons: ["白开水","咖啡","果汁","都不要"], html: "这里是tit_mini.showmessagebox

推荐文章

热门文章

相关标签