@JsonAlias和@JSONField序列化和反序列化

@com.fasterxml.jackson.annotation.JsonAlias("expressCode")
@com.alibaba.fastjson.annotation.JSONField(name = "expressCode")

这两个注解分别属于不同的JSON序列化框架:JacksonFastjson,它们的用途是处理JSON字段的名称映射,在序列化和反序列化过程中,帮助将不同命名风格的字段映射到Java对象的属性上。

1. @JsonAlias (Jackson)

@JsonAlias 是 Jackson 序列化框架中的注解,用于指定一个属性在反序列化时可以接受多个不同的JSON字段名。这在处理可能来自不同数据源的JSON时很有用,这些数据源可能使用不同的字段名称来表示同一个含义。

用途:
  • 当JSON数据的字段名不一致时,@JsonAlias可以指定多个字段名映射到同一个Java属性。
  • 在反序列化时,Jackson会尝试匹配这些别名之一来填充对象属性。
举例说明:

假设一个Java对象有一个属性 expressCode,但不同的API返回的JSON数据中,这个字段可能被命名为 express_codeshippingCode。使用 @JsonAlias,可以允许 Jackson 在反序列化时识别这多个字段名。

import com.fasterxml.jackson.annotation.JsonAlias;public class Order {@JsonAlias({"express_code", "shippingCode"})private String expressCode;// getter and setter
}

当我们接收到如下JSON时,Jackson会将 express_codeshippingCode 的值映射到 expressCode

{"express_code": "EXP123456"
}

{"shippingCode": "EXP123456"
}

都会成功地映射到 Order 对象的 expressCode 字段。

2. @JSONField (Fastjson)

@JSONField 是 Fastjson 序列化框架中的注解,用于指定JSON序列化和反序列化时的字段名。这相当于为Java类中的字段自定义序列化时使用的JSON key 名称,或者处理JSON的反序列化。

用途:
  • 可以用来指定JSON字段和Java字段之间的映射关系,尤其在序列化和反序列化过程中,JSON中的字段名和Java字段名不一致时很有用。
  • 在序列化时,Java字段的名字会转换成 @JSONField 注解中指定的字段名。
  • 在反序列化时,Fastjson会根据指定的字段名从JSON中提取对应的数据。
举例说明:

假设同样的类 Order,但这次我们使用 Fastjson 来处理,假设我们想在序列化时将 expressCode 输出为 express_code,我们可以使用 @JSONField 来指定这个名称:

import com.alibaba.fastjson.annotation.JSONField;public class Order {@JSONField(name = "express_code")private String expressCode;// getter and setter
}
示例:

当我们将对象序列化为JSON时,它会输出如下结果:

{"express_code": "EXP123456"
}

而在反序列化时,@JSONField(name = "express_code") 也允许 Fastjson 将JSON中的 express_code 字段映射到 expressCode 属性。

综合对比:

  • @JsonAlias (Jackson) 主要是用来处理 反序列化 时字段名的别名,可以映射多个别名到同一个属性上。
  • @JSONField (Fastjson) 用来指定 序列化反序列化 时的字段名,当Java字段与JSON字段名不同步时使用。

一起使用的场景:

两者一起使用时,可以确保代码兼容使用 Jackson 和 Fastjson 两种不同的JSON处理库,能够处理不同格式的JSON输入和输出。

例如:

import com.fasterxml.jackson.annotation.JsonAlias;
import com.alibaba.fastjson.annotation.JSONField;public class Order {@JsonAlias({"express_code", "shippingCode"})@JSONField(name = "express_code")private String expressCode;// getter and setter
}

此时,Jackson在反序列化时可以识别 express_codeshippingCode,而 Fastjson 在序列化时会输出 express_code

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

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

相关文章

【重学 MySQL】五十六、位类型

【重学 MySQL】五十六、位类型 定义赋值与使用注意事项应用场景 在MySQL数据库中,位类型(BIT类型)是一种用于存储位字段值的数据类型。 定义 BIT(n)表示n个位字段值,其中n是一个范围从1到64的整数。这意味着你可以存储从1位到64…

数据库镜像拷贝还原--Oracle数据库实例启动报错

现象描述: 从服务器,在未停数据库服务情况下,拍快照还原到另一台服务器,启动数据库报错。 过程记录: 一、启动数据库提示:ORA-01102 报错信息: ORA-01102: cannot mount database in EXCLUSI…

requestidlecallback与分时函数

前言 我们知道GUI 渲染线程与 JS 引擎线程是互斥的。当JS程序执行时间过长,会阻塞页面渲染和事件响应。那么针对一些优先级较低的任务,我们可以利用分时函数在主线程空闲时执行,减少卡顿。其本质是将一个长任务拆分成数个短任务,…

macos php开发环境之macport安装的php扩展安装,php常用扩展安装,port中可用的所有php扩展列表

macos中,我们使用了port 安装了php后,默认只带有php基本的核心扩展的, 如果需要使用其他的扩展,如 redis, https, xdebug等扩展就需要我们手动来安装对应的扩展。 macos php开发环境 macport安装的php的方法见macos 中…

国产工具链GCKontrol-GCAir助力控制律开发快速验证

前言 随着航空领域技术的不断发展,飞机的飞行品质评估和优化成为了航空领域的一个重要任务,为了确保飞行器在各种复杂条件下的稳定性,控制律设计过程中的模型和数据验证需要大量仿真和测试。 本文将探讨基于世冠科技的国产软件工具链GCKont…

Leetcode 37. 解数独

1.题目基本信息 1.1.题目描述 编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 33 宫内只能出现一次。(请参考…

如何设置 GitLab 密码长度?

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 60天专业…

使用 Spring Boot 客户端对 Apache Pulsar 进行自定义身份验证

先决条件 在我们深入为 Pulsar 创建自定义身份验证机制之前,请确保您具有以下设置: Java 17: 确保您的环境中已安装并设置 Java 17。Spring Boot Version 3.3.2: 我们将使用 Spring Boot 创建自定义 Pulsar 客户端。Docker & Docker Compose: 在容器…

cudnn8编译caffe过程(保姆级图文全过程,涵盖各种报错及解决办法)

众所周知,caffe是个较老的框架,而且只支持到cudnn7,但是笔者在复现ds-slam过程中又必须编译caffe,我的cuda版本是11.4,最低只支持到8.2.4,故没办法,只能编译了 在此记录过程、报错及解决办法如下; 首先安装依赖: sudo apt-get install git sudo apt-get install lib…

facebook受众选择设置策略的最佳方式

在进行Facebookguanggao投放时,受众的选择是一个至关重要的步骤。正确的受众选择不仅能够帮助我们更好地定位目标用户,还能显著提高guanggao的转化率和投资回报率(ROI)。然而,受众选择的数量和范围同样是需要认真考虑的…

外呼系统致力于企业低成本获客,如何做

外呼系统作为一种通过电脑自动往外拨打用户电话,并播放录制好的语音或进行实时对话的系统,对于企业低成本获客具有显著作用。 以下是一些利用外呼系统实现低成本获客的策略和步骤: 一、明确目标和定位 1. 了解市场需求 - 深入分析目标市场…

【Tor】使用Debian系统搭建obfs4 Bridge网桥

你好 我是无聊的木子。 目录 前言 写作の原因 网桥是个啥? 正文 - 到底咋搭建捏 搞台机子先 比较简便の方法 - 买台云服务器 首月五折 一元试用 远程连接服务器 更加复杂の办法 - 自己拿物理机做网桥 开始搭建网桥 先安装Tor 然后配置网桥 最后组合网桥 找到fin…

大数据面试-笔试SQL

一个表table: c_id u_id score;用SQL计算每个班级top5学生的平均分(腾讯) select class_id,avg(score) as score_avg from (select *,row_number() over(partition by class_id order by score desc) as score_rank from table ) t1 where t…

AI推理部署工具之大汇总,后面会逐步补充

目录 1、FastDeploy 1.1 安装 1.2 yolo推理部署示例 1.3 推理部署思路 1、FastDeploy FastDeploy 通过提供简洁的API接口,让AI推理部署变得更加高效和灵活。适用于多种主流算法模型,且支持跨平台、多硬件兼容等优势。 支持 GPU、CPU、Jetson、ARM …

研发中台拆分之路:深度剖析、心得总结与经验分享

背景在 21 年,中台拆分在 21 年,以下为中台拆分的过程心得,带有一定的主观,偏向于中小团队中台建设参考(这里的中小团队指 3-100 人的团队),对于大型团队不太适用,毕竟大型团队人中 …

【计算机网络 - 基础问题】每日 3 题(三十四)

✍个人博客:https://blog.csdn.net/Newin2020?typeblog 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞…

Qt源码-Qt多媒体音频框架

Qt 多媒体音频框架 一、概述二、音频设计1. ALSA 基础2. Qt 音频类1. 接口实现2. alsa 插件实现 一、概述 环境详细Qt版本Qt 5.15操作系统Deepin v23代码工具Visual Code源码https://github.com/qt/qtmultimedia/tree/5.15 这里记录一下在Linux下Qt 的 Qt Multimedia 模块的设…

telnet不通的原因及其解决措施

telnet不通的原因及其解决措施 当遇到telnet端口不通的问题时,可能的原因和解决方法如下: 1、防火墙或安全组设置: 防火墙或安全组可能会阻止telnet连接。需要检查目标服务器的防火墙设置,确保相关端口未被屏蔽。如果使用的是阿…

Java | Leetcode Java题解之第472题连接词

题目&#xff1a; 题解&#xff1a; class Solution {Trie trie new Trie();public List<String> findAllConcatenatedWordsInADict(String[] words) {List<String> ans new ArrayList<String>();Arrays.sort(words, (a, b) -> a.length() - b.length(…

RelationGraph实现工单进度图——js技能提升

直接上图&#xff1a; 从上图中可以看到整个工单的进度是从【开始】指向【PCB判责】【完善客诉】【PCBA列表】&#xff0c;同时【完善客诉】又可以同时指向【PCB判责】【PCBA列表】&#xff0c;后续各自指向自己的进度。 直接上代码&#xff1a; 1.安装 1.1 Npm 方式 npm …