Jackson使用实例:将后端返回的 JSON 字段名转换为大写(多种方案详细实例实现)

目录

  • 将返回 JSON 字段名转换为大写
    • 背景
    • 解决方案
    • 1. **局部字段名转换为大写** — 使用 `@JsonNaming` 注解
      • 方案概述
      • 步骤
    • 2. **全局字段名转换为大写** — 配置 `ObjectMapper`
      • 方案概述
      • 步骤
    • 3. **手动指定字段名称** — 使用 `@JsonProperty` 注解
      • 方案概述
      • 步骤
    • 4. **总结**
    • 推荐方案

将返回 JSON 字段名转换为大写

背景

在 Java 后端开发中,使用 Jackson 将 Java 对象序列化为 JSON 数据时,可能有需求将字段名统一转换为大写。常见的需求包括:

  • 需要与前端约定 JSON 字段名统一为大写
  • 特定场景下需要对某些字段名做统一的命名规范

本文总结了几种常见的实现方式来满足这一需求。

解决方案

以下是三种不同的方案,用于将返回的 JSON 中的字段名转换为大写。


1. 局部字段名转换为大写 — 使用 @JsonNaming 注解

方案概述

通过创建一个自定义的命名策略类,并使用 @JsonNaming 注解在特定实体类中应用该策略,将该实体的所有字段名转换为大写。

步骤

  1. 创建自定义命名策略类

继承 PropertyNamingStrategy.PropertyNamingStrategyBase 并重写 translate 方法,将字段名转换为大写。

import com.fasterxml.jackson.databind.PropertyNamingStrategy;public class UpperCaseNamingStrategy extends PropertyNamingStrategy.PropertyNamingStrategyBase {@Overridepublic String translate(String input) {if (input != null) {return input.toUpperCase();  // 将字段名转换为大写}return input;}
}
  1. 在实体类上应用自定义命名策略

使用 @JsonNaming 注解,指定自定义的命名策略类,仅对该类的字段进行大写转换。

import com.fasterxml.jackson.databind.annotation.JsonNaming;@JsonNaming(UpperCaseNamingStrategy.class)
public class YourEntity {private String id;private String sdko;// Getters and Setterspublic String getId() {return id;}public void setId(String id) {this.id = id;}public String getSdko() {return sdko;}public void setSdko(String sdko) {this.sdko = sdko;}
}
  1. 返回的 JSON

当返回 YourEntity 对象时,字段名会被自动转换为大写:

{"ID": "123","SDKO": "456"
}

2. 全局字段名转换为大写 — 配置 ObjectMapper

方案概述

通过配置 Spring Boot 中的 ObjectMapper 来全局应用大写的字段命名规则,使所有返回的 JSON 中的字段名都变为大写。

步骤

  1. 创建配置类并设置 ObjectMapper

在 Spring Boot 项目中创建一个配置类,配置 ObjectMapper 使用自定义的命名策略。

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class JacksonConfig {@Beanpublic ObjectMapper objectMapper() {ObjectMapper objectMapper = new ObjectMapper();objectMapper.setPropertyNamingStrategy(new UpperCaseNamingStrategy());  // 设置为大写命名策略return objectMapper;}
}
  1. 返回的 JSON

所有返回的 JSON 字段都会自动转换为大写:

{"ID": "123","SDKO": "456"
}

3. 手动指定字段名称 — 使用 @JsonProperty 注解

方案概述

如果只需要对个别字段进行大写转换,可以通过 @JsonProperty 注解为字段手动指定名称,将字段名转换为大写。

步骤

  1. 在字段上使用 @JsonProperty 注解

在实体类的字段上使用 @JsonProperty 注解,将字段名显式地设置为大写。

import com.fasterxml.jackson.annotation.JsonProperty;public class YourEntity {@JsonProperty("ID")private String id;@JsonProperty("SDKO")private String sdko;// Getters and Setterspublic String getId() {return id;}public void setId(String id) {this.id = id;}public String getSdko() {return sdko;}public void setSdko(String sdko) {this.sdko = sdko;}
}
  1. 返回的 JSON

此时,只有带有 @JsonProperty 注解的字段名会变为大写:

{"ID": "123","SDKO": "456"
}

4. 总结

方案描述优势适用场景
局部字段名转换使用 @JsonNaming 注解和自定义 PropertyNamingStrategy仅对特定实体类生效,灵活控制只需对特定实体类或场景中的字段进行命名转换
全局字段名转换配置 ObjectMapper 使用自定义命名策略全局生效,所有 JSON 字段名统一转换为大写需要所有返回 JSON 的字段名都进行大写转换
手动指定字段名使用 @JsonProperty 注解手动指定字段名称精确控制字段的名称转换,仅对个别字段生效只需要个别字段转换,且不想影响其他字段的命名

推荐方案

  • 局部字段名转换:如果你只需要对某个特定实体类的字段进行大写转换,使用 @JsonNaming 注解结合自定义命名策略最为合适。
  • 全局字段名转换:如果你的应用中所有字段都需要转换为大写,可以配置 ObjectMapper 进行全局处理。
  • 手动指定字段名:如果只想对部分字段进行大写转换,可以使用 @JsonProperty 注解进行精确控制。

根据实际需求,选择最适合的方案来实现字段名转换为大写的功能。

希望对你有所帮助,若有问题欢迎指正~😊

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

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

相关文章

汽车一键启动开关 、一键启动按键 、一键启动按钮

‌汽车一键启动按钮是智能汽车的重要部分,通常用于启动和关闭引擎‌。 ‌具体功能‌: ‌启动引擎‌:在许多现代汽车中,一键启动按键取代了传统的钥匙启动方式。只需轻轻按下一键启动按钮,车辆电源即被接通&#xff0c…

.NET用C#导入Excel数据到数据库

将Excel文件中的数据导入到数据库中不仅能够提升数据处理的效率和准确性,还能极大地促进数据分析和决策制定的过程。尤其在企业级应用中,Excel作为数据输入和初步整理的工具非常普遍,但其功能对于复杂查询、大规模数据管理和跨部门的数据共享…

python中数组怎么转换为字符串

1、数组转字符串 #方法1 arr [a,b] str1 .join(arr)#方法2 arr [1,2,3] #str .join(str(i) for i in arr)#此处str命名与str函数冲突! str2 .join(str(i) for i in arr) 2、字符串转数组 #方法一 str_x avfg st_list list(str_x) #使用list()#方法二 list_s…

国内管理咨询公司哪家落地辅导做的好?

在当今快速变化的市场环境中,企业面临着前所未有的竞争压力与转型挑战。为了在这场没有硝烟的战争中脱颖而出,许多企业开始寻求外部专业力量的帮助,以期通过科学的管理咨询实现战略升级和业绩突破。而在众多的管理咨询公司中,思博…

前端进阶指南:详解 Source Map 的作用与工作原理,解析.map文件

前言 在前端开发中,代码的压缩与混淆是提升网页性能的常见做法。然而,这种优化措施也带来了调试难度的增加,因为压缩后的代码往往难以阅读和理解。这时,Source Map 技术应运而生,作为连接源代码和构建后代码的桥梁&am…

Cursor vs VSCode:主要区别与优势分析

Cursor - The AI Code Editor 1. AI 集成能力 Cursor的优势 原生AI集成: # Cursor可以直接通过快捷键调用AI # 例如:按下 Ctrl K 可以直接获取代码建议 def complex_function():# 在这里,你可以直接询问AI如何实现功能# AI会直接在编辑器中…

python+selenium的八大定位方式

1.id定位 元素的id属 driver.find_element_by_id(By.ID,"username")2.name定位 driver.find_element_by_id(By.NAME,"username")#一个login_btn_list webdriver.find_elements(By.CLASS_NAME,)#多个元素组成的列表, login_btn_list[1].click…

RTCMultiConnection 跨域问题解决

js套件地址 https://github.com/muaz-khan/RTCMultiConnection server套件地址 https://github.com/muaz-khan/RTCMultiConnection-Server 要解决的就是server代码的跨域问题 原装写法: 解决写法: // 喜欢组合语法的自己组 const io new ioServer.S…

【JavaEE】多线程(6)

一、用户态与内核态 【概念】 用户态是指用户程序运行时的状态,在这种状态下,CPU只能执行用户态下的指令,并且只能访问受限的内存空间 内核态是操作系统内核运行时的状态,内核是计算机系统的核心部分,CPU可以执行所有…

Ajax:回忆与节点

一点回忆 面对我的Ajax学习,实现前后端交互,最开始我采用的使用网络寻找intellij IDEA Ultimate破解方法,然后最终成功,然后按照相关教程配置java ee项目,然后中间又去配置了Tomcat服务器,然后又去学习了一…

1688:开启跨境电商新篇章

引言 在全球化贸易不断深化的今天,跨境电商已成为中小企业拓展国际市场的重要渠道。1688,作为阿里巴巴集团旗下领先的内贸平台,近年来也逐渐发力跨境电商领域,为全球买家提供了一个直通中国工厂的贸易平台。本文将带您深入了解16…

2024-12-06 Unity Addressables3——资源加载

文章目录 1 引用加载1.1 Addressables 的资源引用类1.2 加载资源1.3 加载场景1.4 释放资源 2 Label 介绍3 动态加载3.1 加载单个资源3.2 加载多个资源 Unity 版本:6000.0.26f1c1Addressables 版本:2.3.1 1 引用加载 1.1 Addressables 的资源引用类 Ass…

API设计指南:详解HTTP状态码错误解析、HTTP方法及参数命名规则

目录 1、HTTP API规范1.1 原则1.2 协议1.3 版本1.4 路径1.5 HTTP 方法(Method)1.6 过滤信息1.7 参数命名1.8 HTTP 状态码(Response Code)1.9 鉴权 2、状态码2.1 API返回基础规范2.2 常见的 HTTP 状态码2.3 API错误信息应该放到响应…

【C#】键值对的一种常见数据结构Dictionary<TKey, TValue>

在 C# 中&#xff0c;Dictionary<TKey, TValue> 是一个 键值对&#xff08;key-value&#xff09;集合&#xff0c;是一种非常常见的数据结构。它允许通过 键&#xff08;key&#xff09;来快速查找与之相关的 值&#xff08;value&#xff09;。你可以将其类比为一个映射…

Word处理表格的一些宏

目录 1、表格首行居中2、表格内容靠左上下居中&#xff08;排除首行&#xff09; 1、表格首行居中 说明&#xff1a; 遇到错误将进行捕获&#xff0c;然后继续处理下一个表格 宏&#xff1a; Sub 表格首行居中()Dim tbl As tableOn Error Resume Next 错误时继续执行下一个…

相机动态/在线标定

图1 图2 基本原理 【原理1】平行线在射影变换后会交于一点。如图所示,A为相机光心,蓝色矩形框为归一化平面,O为平面中心。地面四条黄色直线为平行且等距的车道线。HI交其中两条车道线于H、I, 过G作HI的平行线GM交车道线于M。HI、GM在归一化平面上的投影分别为JK、PN,二者会…

嵌入式Linux(SOC带GPU树莓派)无窗口系统下搭建 OpenGL ES + Qt 开发环境,并绘制旋转金字塔

树莓派无窗口系统下搭建 OpenGL ES Qt 开发环境&#xff0c;并绘制旋转金字塔 1. 安装 OpenGL ES 开发环境 运行以下命令安装所需的 OpenGL ES 开发工具和库&#xff1a; sudo apt install cmake mesa-utils libegl1-mesa-dev libgles2-mesa-dev libdrm-dev libgbm-dev2. 安…

工作:SolidWorks从3D文件导出2D的DWG或DXF类型文件方法

工作&#xff1a;SolidWorks从3D文件导出2D的DWG或DXF类型文件方法 SolidWorks从3D文件导出2D的DWG或2D DXF类型文件方法&#xff08;一&#xff09;打开3D文件&#xff08;二&#xff09;从装配体到工程图&#xff08;三&#xff09;拖出想要的角度的图型&#xff08;四&#…

【AI系统】低比特量化原理

低比特量化原理 计算机里面数值有很多种表示方式&#xff0c;如浮点表示的 FP32、FP16&#xff0c;整数表示的 INT32、INT16、INT8&#xff0c;量化一般是将 FP32、FP16 降低为 INT8 甚至 INT4 等低比特表示。 模型量化则是一种将浮点值映射到低比特离散值的技术&#xff0c;可…

Spark区分应用程序 Application、作业Job、阶段Stage、任务Task

目录 一、Spark核心概念 1、应用程序Application 2、作业Job 3、阶段Stage 4、任务Task 二、示例 一、Spark核心概念 在Apache Spark中&#xff0c;有几个核心概念用于描述应用程序的执行流程和组件&#xff0c;包括应用程序 Application、作业Job、阶段Stage、任务Task…