商城网站建设公司爱问,织梦系统做的网站怎么样,安卓app开发需要的技术,洛阳网站建设招聘信息前言#xff1a;
fastjson是一款强大的json格式转换工具#xff0c;我个人在开发中就非常喜欢用fastjson#xff1b;但是由于某些原因#xff0c;导致fastjson会有一些漏洞#xff0c;因此在漏洞扫描后需要修复都是要求我们升级版本#xff0c;或者替换为jackjson#…前言
fastjson是一款强大的json格式转换工具我个人在开发中就非常喜欢用fastjson但是由于某些原因导致fastjson会有一些漏洞因此在漏洞扫描后需要修复都是要求我们升级版本或者替换为jackjsonfastjson漏洞提示如下 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.safeModetrue 如果有多个包名前缀可用逗号隔开 3通过类路径的fastjson.properties文件来配置 fastjson.parser.safeModetrue 因此我这里来做一个fastjson和jackjson的使用方法和一些对比
Fastjson vs Jackson
设计方案
fastjson 和 Jackson 这两个库的设计方案存在差异。fastjson 采用的是完全基于注解Annotation的方式来标识某个 Java 对象属性是否需要序列化或者反序列化。而 Jackson 则采用了 Mixin 和 PropertyNamingStrategy 这两种技术。
序列化和反序列化
fastjson 和 Jackson 在序列化和反序列化过程中也有细微的区别。fastjson 的序列化和反序列化速度比 Jackson 要快得多。fastjson 可以通过一些配置选项来进一步优化性能比如关闭循环引用检测、添加类型信息等。相比之下Jackson 的性能会随着数据规模的增长而呈现出指数级增长。
使用方法
FastJson
1.添加 fastjson 依赖到项目中 dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.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 依赖到项目中 dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.12.5/version/dependency2.在类上使用注解即可 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);
MapString, Object updateMap objectMapper.convertValue(dto, Map.class);在上述代码中使用 setSerializationInclusion() 方法将属性为 null 的字段排除在转换过程之外。JsonInclude.Include.NON_NULL 表示将属性值为 null 的字段排除。
这样在转换时只会包含非空字段的键值对。 总结
Fastjson 和 Jackson 都是非常好用的 JSON 库但它们在设计方案、实现方式以及使用方法上存在一些差异。如果你需要一个功能丰富的 JSON 库同时对性能要求较高且要求轻便快捷操作简单的话那么Fastjson 可能更适合你而如果你更侧重于代码可读性和可维护性Jackson 可能是更好的选择。无论哪个库都需要根据具体业务场景和需求来选择。