【注解】反序列化时匹配多个 JSON 属性名 @JsonAlias 详解

@JsonAlias 注解是 Jackson 提供的一个功能强大的注解,允许一个字段在反序列化时匹配多个 JSON 属性名。它适用于在处理多种输入数据格式时,或当 JSON 数据的键名可能变化时。

一、@JsonAlias 的作用

  • 多种别名:@JsonAlias 允许你为一个字段定义多个可能的 JSON 键名,这在 JSON 数据的键名有多种可能时非常有用。
  • 反序列化:在反序列化时,如果 JSON 中的键名与 @JsonAlias 中定义的别名之一匹配,Jackson
    就会把这个键的值赋给对应的字段。
  • @JsonAlias 的作用除了上述两个之外,也同 @JsonProperty ,详情参考—> 【注解】@JsonProperty 详解

二、示例:使用 @JsonAlias 来处理多个键名

真实使用场景—> 数据库存的JSON数据转为Map,key值是中文,转成英文,转为json数据传给前端

假设你有一个 User 类,它的字段可以接收多个不同的 JSON 键名。例如,可能存在 “名称” “名字”,它们都应该映射到 name 字段。
在这里插入图片描述

import com.fasterxml.jackson.annotation.JsonAlias;public class User {@JsonAlias({"名称", "名字"})private String name;@JsonAlias({"年龄", "岁数"})private int age;@JsonAlias({"性别", "性"})private String gender;// Getters and Setterspublic String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}
}

使用示例
假设你接收到的 JSON 数据可能是以下两种形式之一:

{"名字": "张三","岁数": 30,"性": "男"
}

或者:

{"名称": "李四","年龄": 25,"性别": "女"
}

@JsonAlias 会处理这两种情况,并将它们都映射到 User 对象中相应的字段上。

控制器中的使用
在这里插入图片描述

@RestController
@RequestMapping("/api")
public class UserController {@PostMapping("/user")public User createUser(@RequestBody User user) {// 此时 user 对象已经根据别名进行了正确的映射return user;  // 可以返回给前端,或者进行其他业务处理}
}

前端处理
无论前端发送的是 “名字” 还是 “名称”,后端都可以正确处理并将其映射到 name 字段上。

@JsonAlias 在反序列化中处理多个别名:适用于处理不同 JSON 格式或处理 JSON 键名变化的场景。
便捷性:通过 @JsonAlias,无需在代码中手动处理不同的键名映射,Jackson 会自动完成这项工作。
增强灵活性:可以更灵活地处理外部输入的数据格式,确保应用程序的兼容性和健壮性。

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

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

相关文章

ZNS SSD是不是持久缓存的理想选择?

随着数据量的增加和技术的进步,对于高效、可靠的存储解决方案的需求日益增长。传统的基于块的SSD虽然具有成本效益和持久性的优点,但在处理写密集型和更新密集型工作负载时存在局限性。 NAND闪存的特点是数据只能按页(例如4KiB)写…

2024年最新最全的【大模型学习路线规划】从零基础入门到精通!

2024年最新最全的大模型学习路线规划,对于零基础入门到精通的学习者来说,可以遵循以下阶段进行: 文章目录 一、基础准备阶段数学基础:编程语言:深度学习基础: 二、核心技术学习阶段Transformer模型&#xf…

[Linux#41][线程] 线程的特性 | 分离线程 | 并发的问题

1.线程的特性 进程和线程的关系如下图: 关于进程线程的问题 • 如何看待之前学习的单进程?具有一个线程执行流的进程 线程 ID 及进程地址空间布局 pthread_ create 函数会产生一个线程 ID,存放在第一个参数指向的地址中。 该线程 ID 和前面说的线程 ID …

动手实现基于Reactor模型的高并发Web服务器(一):epoll+多线程版本

系统流程概览 main函数 对于一个服务器程序来说,因为要为外部的客户端程序提供网络服务,也就是进行数据的读写,这就必然需要一个 socket 文件描述符,只有拥有了文件描述符 C/S 两端才能通过 socket 套接字进行网络通信&#xff0…

4.Redis单线程和多线程

1.Redis的单线程 Redis的单线程主要是指Redis的网络IO和键值对读写是由一个线程完成的,Redis在处理客户端的请求时包括获取(Socket读)、解析、执行、内容返回(Socket写)等都由一个顺序串行的主线程处理,这…

ProxySQL 读写分离配置

ProxySQL 是一个高性能、高可用的 MySQL 代理软件,旨在提升 MySQL 数据库的可扩展性和性能。它可以在应用程序和 MySQL 服务器之间充当中间层,提供强大的路由、负载均衡和查询优化功能。 ProxySQL 的主要功能: 查询路由: ProxySQ…

市盈率的概念

写篇有关市盈率的【不务正业】的内容。 重要公式 市盈率 官方的定义 平均市盈率=∑(收盘价发行数量)/∑(每股收益发行数量),统计时剔除亏损及暂停上市的上市公司。 静态市盈率 滚动市盈率(TTM) 股票市盈率的意义 如果某股票有较…

培训第三十四天(初步了解Docker与套接字的应用)

上午 回顾 1、主从复制(高可用) 2、传统的主从复制 3、gtids事务型的主从复制 4、注意 1)server_id唯一 2)8.X版本需要get_ssl_pub_key 3)5.X不需要 4)change master to 5)stop | sta…

拍抖音在哪里去水印,三招教你快速掌握去水印技巧

在抖音上,我们经常会看到一些精彩的内容,想要保存下来,但往往视频上会有水印。本文将分享五个免费且高效的去除抖音视频水印的技巧,帮助你轻松保存无水印的视频。 技巧一:奈斯水印助手(小程序) 奈斯水印助手是一款专…

JavaScript(30)——解构

数组解构 数组解构是将数组的单元值快速批量赋值给一系列变量的简洁语法 基本语法: 赋值运算符左侧的[]用于批量声明变量,右侧数组的单元值将被赋值给左侧变量变量的顺序对应数组单元值的位置依次进行赋值操作 const arr [1, 2, 3, 4, 5]const [a, b…

云渲染的三个条件是指什么!哪三点最重要!

云渲染技术以其灵活性和效率,让创意人士和企业无论身处何地,都能通过网络接入强大的远程服务器,轻松完成复杂的图形渲染任务,但要发挥其魔力,我们得满足一些关键条件。 一、网络连接:云渲染的桥梁 首先&am…

协作新选择:即时白板在线白板软件分享

在团队合作中,产品经理扮演着至关重要的角色,他们不仅是产品与用户之间的纽带,更是产品性能和用户需求的桥梁。他们需要深入参与产品的研发过程,并与研发团队保持紧密的沟通。因此,产品经理需要一款高效的协作工具来提…

arthas源码刨析:arthas 命令粗谈(3)

文章目录 dashboardwatchretransform 前面介绍了 arthas 启动相关的代码并聊了聊怎么到一个 shellserver 的建立。 本篇我们来探讨一下几个使用频次非常高的命令是如何实现的。 dashboard 想看这个命令的主要原因是编程这些年来从来没有开发过 terminal 的这种比较花哨的界面&a…

SpringBoot集成kafka-获取生产者发送的消息(阻塞式和非阻塞式获取)

说明 CompletableFuture对象需要的SpringBoot版本为3.X.X以上,需要的kafka依赖版本为3.X.X以上,需要的jdk版本17以上。 1、阻塞式(等待式)获取生产者发送的消息 生产者: package com.power.producer;import org.ap…

【html+css 绚丽Loading】 000014 三元波动盘

前言:哈喽,大家好,今天给大家分享htmlcss 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 &#x1f495…

JVM系列--初始JVM

根据《黑马程序员JVM虚拟机入门到实战全套视频教程》整理 1 什么是JVM JVM 全称是 Java Virtual Machine,中文译名 Java虚拟机。JVM 本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件。 Java源代码执行流程如下: 分为三个步…

书生大模型实战营第三期基础岛第二课——8G 显存玩转书生大模型 Demo

8G 显存玩转书生大模型 Demo 基础任务进阶作业一:进阶作业二: 基础任务 使用 Cli Demo 完成 InternLM2-Chat-1.8B 模型的部署,并生成 300 字小故事,记录复现过程并截图。 创建conda环境 # 创建环境 conda create -n demo pytho…

[Meachines] [Easy] Legacy nmap 漏洞扫描脚本深度发现+MS08-067

信息收集 IP AddressOpening Ports10.10.10.4TCP:135,139,445 $ nmap -p- 10.10.10.4 --min-rate 1000 -sC -sV -Pn PORT STATE SERVICE VERSION 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn Microsoft Windows n…

Java二十三种设计模式-责任链模式(17/23)

责任链模式:实现请求处理的灵活流转 引言 在这篇博客中,我们深入探讨了责任链模式的精髓,从其定义和用途到实现方法,再到使用场景、优缺点、与其他模式的比较,以及最佳实践和替代方案,旨在指导开发者如何…

SAP BW:QUERY数据结果写入ADSO

作者 idan lian 如需转载备注出处 如果对你有帮助,请点赞收藏~~~ 需求背景 客户基于QUERY进行报表展示,现需迁移到永洪报表平台,query中的变量参数,公式等无法直接生成视图,query相对复杂,不想直接在视图…