news 2026/4/23 15:16:37

在 Spring Boot 中实现 JSON 字段的蛇形命

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在 Spring Boot 中实现 JSON 字段的蛇形命

在 Spring Boot 项目中,常常需要实现 Java 对象字段使用驼峰命名,而在序列化为 JSON 时使用蛇形命名。这种需求在与外部 API 交互或满足特定数据格式规范时尤为常见。本文将详细介绍几种实现方案,并提供代码示例。

方案一:全局配置(推荐)

通过修改 `application.properties` 或 `application.yml` 文件,为整个项目统一配置命名策略。

application.properties:

```properties

spring.jackson.propertynamingstrategy=SNAKE_CASE

```

application.yml:

```yaml

spring:

jackson:

propertynamingstrategy: SNAKE_CASE

```

优点:配置简单,一劳永逸,确保整个项目命名风格统一。

方案二:使用注解配置

在实体类上使用 `@JsonNaming` 注解,指定命名策略。

```java

import com.fasterxml.jackson.databind.PropertyNamingStrategies;

import com.fasterxml.jackson.databind.annotation.JsonNaming;

import lombok.Data;

@Data

@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)

public class User {

private String userName; // Java字段:驼峰命名

private Integer userAge;

private String emailAddress;

// 序列化后JSON:{"user_name":"张三","user_age":25,"email_address":"zhangsan@example.com"}

}

```

方案三:自定义 Jackson 配置类

创建配置类,自定义 `ObjectMapper` Bean。

```java

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import com.fasterxml.jackson.databind.ObjectMapper;

import com.fasterxml.jackson.databind.PropertyNamingStrategies;

@Configuration

public class JacksonConfig {

@Bean

public ObjectMapper objectMapper() {

ObjectMapper objectMapper = new ObjectMapper();

objectMapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);

return objectMapper;

}

}

```

方案四:单个字段自定义映射

若仅需对部分字段使用蛇形命名,可在字段上使用 `@JsonProperty` 注解。

```java

import com.fasterxml.jackson.annotation.JsonProperty;

public class User {

@JsonProperty("user_name")

private String userName;

@JsonProperty("user_age")

private Integer userAge;

private String emailAddress; // 此字段将遵循默认命名策略

// 省略 getter 和 setter

}

```

优先级说明:字段级别的 `@JsonProperty` 注解优先级最高,会覆盖类级别或全局的命名策略。

完整示例

以下是一个完整的 API 响应封装示例,演示如何在实际项目中使用蛇形命名。

实体类(ApiResponse.java):

```java

import com.fasterxml.jackson.databind.PropertyNamingStrategies;

import com.fasterxml.jackson.databind.annotation.JsonNaming;

import java.sql.Timestamp;

@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)

public class ApiResponse<T> {

private Integer code;

private String message;

private T data;

private Timestamp createTime;

// 构造方法、getter、setter 省略

}

```

控制器(UserController.java):

```java

import org.springframework.web.bind.annotation.;

@RestController

@RequestMapping("/api/users")

public class UserController {

@GetMapping("/{id}")

public ApiResponse<User> getUser(@PathVariable Long id) {

User user = new User();

user.setUserName("张三");

user.setUserAge(25);

user.setEmailAddress("zhangsan@example.com");

ApiResponse<User> response = new ApiResponse<>();

response.setCode(200);

response.setMessage("成功");

response.setData(user);

response.setCreateTime(new Timestamp(System.currentTimeMillis()));

return response;

}

}

```

响应结果(JSON):

```json

{

"code": 200,

"message": "成功",

"data": {

"user_name": "张三",

"user_age": 25,

"email_address": "zhangsan@example.com"

},

"create_time": "20231001T10:30:00.000+00:00"

}

```

注意事项

1. 优先级顺序:`@JsonProperty`(字段级)> `@JsonNaming`(类级)> 全局配置。

2. 反序列化支持:上述配置同样支持将蛇形命名的 JSON 数据反序列化为驼峰命名的 Java 对象。

3. 版本兼容性:不同 Spring Boot 版本可能在 Jackson 配置上略有差异,建议使用较新版本以获得更好的兼容性。

4. 一致性建议:为避免混淆和维护困难,推荐在项目中采用方案一的全局配置,确保所有 JSON 序列化行为保持一致。

通过以上任一种方案,均可轻松实现 Java 对象字段(驼峰命名)与 JSON 字段(蛇形命名)之间的优雅映射,满足不同场景下的数据格式需求。

来源:小程序app开发|ui设计|软件外包|IT技术服务公司-木风未来科技-成都木风未来科技有限公司

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/14 23:29:16

华为5G网管操作指南:参数配置与命令详解

腾讯混元7B翻译模型实战指南&#xff1a;部署、调优与接口集成 在多语言内容爆发式增长的今天&#xff0c;高质量、低门槛的机器翻译能力已成为国际化产品、跨文化协作和本地化服务的核心基础设施。传统翻译方案往往面临“效果好但难部署”或“易用但质量差”的两难困境。而 H…

作者头像 李华
网站建设 2026/4/23 11:32:47

GPU直通还是容器化?Open-AutoGLM挂虚拟机的3种方案对比

第一章&#xff1a;Open-AutoGLM可以挂虚拟机吗Open-AutoGLM 作为一款基于大语言模型的自动化任务处理框架&#xff0c;其设计初衷是支持多平台部署与轻量化运行。在实际应用中&#xff0c;用户常关注其是否可在虚拟机环境中稳定运行。答案是肯定的&#xff1a;Open-AutoGLM 完…

作者头像 李华
网站建设 2026/4/22 8:51:12

Python爬虫urllib3与requests模块详解

混元-MT-超强翻译模型&#xff1a;网页一键推理的工程化实践 在多语言内容爆炸式增长的今天&#xff0c;如何快速、准确地实现跨语言沟通&#xff0c;已成为科研、政务、教育和出海企业共同面临的挑战。传统翻译方案要么依赖云端API——存在延迟高、成本贵、数据外泄风险&#…

作者头像 李华
网站建设 2026/4/23 11:38:56

只看这一篇就够了:Open-AutoGLM安装第三方应用的5步高效流程

第一章&#xff1a;Open-AutoGLM安装第三方应用的核心概述Open-AutoGLM 是一个面向自动化代码生成与大语言模型集成的开源框架&#xff0c;支持开发者便捷地扩展功能模块。其中&#xff0c;安装第三方应用是实现功能增强的关键环节&#xff0c;允许用户引入外部工具、插件或服务…

作者头像 李华
网站建设 2026/4/22 14:56:07

梯度下降与上升法解析及其应用

Qwen3Guard-Gen-8B&#xff1a;生成式内容安全治理的语义级防线 在AI原生应用爆发式增长的今天&#xff0c;一个令人不安的现象正频繁上演&#xff1a;用户输入一句看似平常的话&#xff0c;大模型却输出了极具诱导性的危险内容&#xff1b;或是某社交平台一夜之间被成千上万条…

作者头像 李华
网站建设 2026/4/23 11:34:46

老化路径对锂离子电池热失控影响的对比研究

老化路径对锂离子电池热失控影响的对比研究 在新能源汽车加速普及的今天&#xff0c;人们越来越关注一个看似矛盾的现象&#xff1a;为什么许多起火事故并非发生在新车刚交付时&#xff0c;而是集中在使用一两年后&#xff1f;这背后隐藏着一个关键事实——电池的安全性并不随时…

作者头像 李华