当前位置: 首页 > news >正文

@JsonNaming实现入参接口参数下划线驼峰自动转换

@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) 是用于 Jackson 库中的一个注解,作用是改变 Java 对象的字段命名策略,特别是在序列化和反序列化时。这可以帮助 Java 对象中的字段名从驼峰命名法(CamelCase)转换为蛇形命名法(snake_case)。
作用

驼峰命名法 (CamelCase):通常用于 Java 中,字段名的第一个单词首字母小写,后续单词的首字母大写,如:employeeName、transferDate。
蛇形命名法 (snake_case):通常用于 JSON 格式,字段名使用小写字母并通过下划线分隔,如:employee_name、transfer_date。

当使用 @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) 注解时,Jackson 在序列化和反序列化过程中会自动将 Java 对象的字段名称从驼峰命名法转换为蛇形命名法。
示例代码

import com.fasterxml.jackson.annotation.JsonNaming;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class EmployeeTransfer {private String employeeName;private String transferDate;private String department;// Getters and setterspublic String getEmployeeName() {return employeeName;}public void setEmployeeName(String employeeName) {this.employeeName = employeeName;}public String getTransferDate() {return transferDate;}public void setTransferDate(String transferDate) {this.transferDate = transferDate;}public String getDepartment() {return department;}public void setDepartment(String department) {this.department = department;}
}

JSON 序列化后的结果

当上述 EmployeeTransfer 类对象转换为 JSON 时,Jackson 会自动将 Java 的驼峰命名字段转换为蛇形命名:

{"employee_name": "John Doe","transfer_date": "2024-12-12","department": "Engineering"
}

反序列化的处理

当 Jackson 从 JSON 字符串反序列化时,它也会自动将 JSON 中的蛇形命名字段转换为 Java 对象中的驼峰命名字段。例如,JSON 中的 “employee_name” 会映射到 Java 对象中的 employeeName 字段。
使用场景

API 接口规范:有时 RESTful API 的 JSON 格式要求使用蛇形命名法,而 Java 类使用的是驼峰命名法。在这种情况下,可以使用 @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) 注解来自动进行转换。数据库字段映射:如果有一个数据库表,其字段名使用蛇形命名法,而 Java 类使用驼峰命名法,这个注解也可以帮助自动映射。

总结

@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) 注解在 Jackson 中用于自动将 Java 对象的属性名从驼峰命名法(camelCase)转换为蛇形命名法(snake_case)。这是一个非常实用的功能,尤其是在 Java 对象与 JSON 数据交换时,能够确保命名的一致性和符合外部规范。

http://www.lryc.cn/news/502258.html

相关文章:

  • 使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
  • MinerU:PDF文档提取工具
  • spark的共享变量
  • Scrapy与MongoDB
  • 爬虫基础与实践
  • 快速上手Serverless架构与FastAPI结合实现自动化移动应用后端
  • ansible自动化运维(二)playbook模式详解
  • 基于Springboot社团管理系统【附源码】
  • CSS:html中,.png的动态图,怎么只让它显示部分,比如只显示右上部分的,或右边中间部分
  • 解读CVPR2024-论文分享|RepViT: Revisiting Mobile CNN From ViT Perspective
  • linux部署安装wordpress
  • [Java] 配置Powershell 的 Maven 环境变量
  • Android -- [SelfView] 自定义弹窗式颜色选择器
  • vue-echarts高度缩小时autoresize失效
  • rabbitMq的rabbitmqctl status报错
  • linux c++ uuid编译时的问题
  • 【STM32】RTT-Studio中HAL库开发教程九:FLASH中的OPT
  • [SWPUCTF 2021 新生赛]crypto9
  • vue中常用的指令
  • Docker Compose实战三:轻松部署PHP
  • 数据分析实战—房价特征关系
  • 云和恩墨 zCloud 与华为云 GaussDB 完成兼容性互认证
  • 【大语言模型LangChain】 ModelsIO OutputParsers详解
  • PaddleSpeech本地部署文档
  • Android 第三方框架:RxJava:源码分析:责任链模式
  • 网络安全 与 加密算法
  • UE4_贴花_贴花基础知识二
  • ElasticSearch 搜索、排序、分页功能
  • MySQL-9.1.0 实现最基础的主从复制
  • Java中的“泛型“