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

news2024/12/25 16:10:33

@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 Setters
    public 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.coloradmin.cn/o/2069670.html

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

相关文章

利用深度学习技术来实现街景图像的语义分割(街景图像语义分割)

本项目致力于利用深度学习技术来实现街景图像的语义分割。通过精确地识别和分类图像中的每个像素,该技术能够自动划分出街道、人行道、车辆、行人等各种不同的物体类别。这在智能交通系统、自动驾驶、城市规划等领域有着广泛的应用前景。 技术实现 深度学习模型&am…

网站上线流程完全手册:域名、服务器与CDN

网站上线的核心要点 需要买域名 域名备案(国内) 买服务器 把服务器IP和域名(网址)绑定 把本地网站代码文件上传到服务器上 我来先来了解下以上的概念 域名介绍 域名是网站的地址,类似于你的家在街上的位置。它让人们通过简单的名字(如 www.baidu.…

大模型时代的AI应用开发,可以不用,但必须会

成熟的“格子衫”和年轻的“脸庞”,与开发者有关的大会总是少不了这两种元素,Create 2024百度AI开发者大会也不例外。 过去几十年,层出不穷的编程语言、框架等新技术,把一代又一代年轻的脸庞,塑造为成熟的格子衫&…

网络安全威胁2024年中报告

近日,奇安信威胁情报中心发布《网络安全威胁2024年中报告》,内容涵盖高级持续性威胁(APT)、勒索软件、互联网黑产、漏洞利用等几方面。 APT攻击活动:2024 年上半年,APT 攻击主要集中在信息技术、政府、科研…

设计模式笔记07(java版)

文章目录 迭代器模式定义结构优缺点使用场景迭代器模式在JDK源码中的使用 访问者模式定义结构案例实现优缺点使用场景扩展1. 分派:2. 动态分派:3. 静态分派:4. 双分派: 备忘录模式概述定义结构“黑箱”备忘录模式优缺点使用场景 解…

递归神经网络 (RNN) 简介

文章目录 一、介绍二、什么是递归神经网络 (RNN)?三、展开递归神经网络四、训练递归神经网络五、RNN 的类型六、现实生活中的 RNN 用例七、RNN 的两个主要限制八、RNN的变体8.1 双向递归神经网络 (BRNN)8.2 长短期记忆…

色彩的含义和使用色彩象征的艺术

无论你走到哪里,你都能看到颜色:天空中的白云,绿色的植被逐渐上升,灰色的石头结构和红砖建筑,在你脚下磨砺着棕色的土壤。你不只是看到这些颜色......你感觉到它们。 一,颜色的含义从何而来? 熟…

华为OD算法题整理目录

目录 专栏导读华为OD机试算法题太多了,知识点繁杂,如何刷题更有效率呢? 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、队列4、链表5、栈6、滑动窗口7、二叉树8、并查集9、矩阵 三、算法1、基础算法① 贪心思维② 二分查…

面试搜狐大模型算法工程师,体验真棒!!!

搜狐大模型算法工程师面试题 应聘岗位:搜狐大模型算法工程师 面试轮数: 整体面试感觉:偏简单 面试过程回顾 1. 自我介绍 在自我介绍环节,我清晰地阐述了个人基本信息、教育背景、工作经历和技能特长,展示了自信和沟通…

代码随想录算法训练营第 53 天 |卡码网110.字符串接龙 卡码网105.有向图的完全可达性 卡码网106.岛屿的周长

代码随想录算法训练营 Day53 代码随想录算法训练营第 53 天 |卡码网110.字符串接龙 卡码网105.有向图的完全可达性 卡码网106.岛屿的周长 目录 代码随想录算法训练营前言卡码网110.字符串接龙卡码网105.有向图的完全可达性卡码网106.岛屿的周长 一、卡码网110.字符串接龙1.题…

Java:StringBuilder、StringBuffer、StringJoiner

文章目录 StringBuilder代码为什么操作字符串建议使用StringBuilder,而不是String?但String还是不可替代的 StringBuffer案例:接收字符串,返回String类型的[11,22]这种形式代码 StringJoiner上面那个案例,用StringJoiner的方法解决…

Linux服务器不能使用su切换到其他用户

1. 现象 使用非root用户登录系统后,想使用su - 切换到root时,输入正确的密码后出现: 一开始以为自己密码记错了,或者是系统被入侵后篡改了root用户密码,服务器上的数据非常重要。后面不通过SSH连接,直接去…

2024年AI最热门行业人才:计算机视觉与自然语言及语音处理设计开发工程师!

2024年,计算机视觉设计与开发工程师以及自然语言及语音处理设计与开发工程师将成为技术行业中的“超级明星”。无论是智能家居、自动驾驶汽车,还是医疗诊断、金融服务,AI已经深刻融入我们的日常生活,而这些领域的智能化转型都离不…

《机器学习》决策树 集成学习 随机森林 参数及实例解析

目录 一、集成学习 1、含义 2、集成学习代表 1)bagging方法 2)boosting方法 3)stacking方法 二、随机森林 1、什么是随机森林 2、特点 1)数据采样随机 2)特征选取随机 3)森林 4)基分类器为…

LLAMA模型解析:快速掌握大模型LLM推理入门技巧

本文借助llama这个模型快速入门LLM的推理过程,技术细节很多都是通用的,也适合其他的LLM。本篇也可以作为CV快速入门NLP简易指南。 本文借助llama这个模型快速入门LLM的推理过程,很多技术细节都是通用的,也适合其他的LLM。这篇文章…

普元EOS-微前端调用base基座的ajax

1 前言 微前端调用EOS应用的服务或API,需要引入base基座,然后使用base基座中的ajax方法。 本文将介绍微前端的高开和低开使用base基座的Ajax的方法。 强烈建议不要自己引入axios或其他ajax库,因为EOS的服务接口都要求身份验证和授权&#…

分页查询面试记录和面试详情

文章目录 1.分页查询面试记录1.req和vo1.InterviewHistoryReq.java2.InterviewHistoryVO.java 2.InterviewController.java3.service1.InterviewHistoryService.java2.InterviewHistoryServiceImpl.java 4.测试 2.查询面试详情1.InterviewQuestionHistoryVO.java2.InterviewCon…

适合开发人员的网页爬虫工具DrissionPage

DrissionPage是一个基于Python的网页自动化工具,它集成了Selenium和Requests的功能,既能够控制浏览器进行用户界面的模拟操作,也能够直接收发数据包进行数据的获取和处理。 开源地址:DrissionPage: 基于python的网页自动化工具。既能控制浏览器,也能收发数据包。可兼顾浏…

CLion调试ROS(包括launch启动的ROS)

打开一个终端,切换到工作空间目录(形如:~/catkin_ws)。 在终端输入,source ./devel/setup.bash 启动Clion,一定要在输入上述命令的窗口启动Clion,否则会存在一些问题。 打开工程,这里也是一个…

【Java】——Java实现数组元素反转的两种方法

在编程中,我们经常会遇到需要对数组元素进行反转的需求。例如,给定一个整数数组arr {1, 2, 3, 4, 5},我们需要将其反转为{5, 4, 3, 2, 1}。下面我们将介绍两种实现数组元素反转的方法。 方法一:遍历数组一半的长度进行元素互换 …