news 2026/3/4 22:29:45

在 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/3 14:18:48

2.5D插件让PS秒变3D场景设计工具

Hunyuan-MT-7B-WEBUI&#xff1a;把顶尖翻译能力装进浏览器的一键工具 在跨境直播带货的直播间里&#xff0c;一位新疆的电商运营正将汉语商品描述实时翻译成哈萨克语&#xff1b;高校实验室中&#xff0c;研究生一键导出论文摘要的英文版本用于国际投稿&#xff1b;某出海企业…

作者头像 李华
网站建设 2026/3/3 14:18:55

Open-AutoGLM核心组件拆解:9个关键技术点决定系统成败

第一章&#xff1a;Open-AutoGLM总体框架Open-AutoGLM 是一个面向自动化自然语言处理任务的开源框架&#xff0c;专为构建、优化和部署基于 GLM 架构的大语言模型应用而设计。该框架整合了任务解析、提示工程、模型调度与结果评估四大核心模块&#xff0c;支持用户以声明式方式…

作者头像 李华
网站建设 2026/3/1 5:48:42

计算机Java毕设实战-基于springboot的高校学生住宿管理系统 学生公寓系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/3/3 14:18:58

Deep Research完全指南:从RAG到AI自主研究的技术进化!

导语 如果AI的终极使命是拓展人类认知的边界&#xff0c;那么“研究”——这项系统性探索未知的核心活动&#xff0c;无疑是其最重要的试金石。2024年&#xff0c;AI Agent技术迎来突破性进展&#xff0c;一个名为 Deep Research&#xff08;深度研究&#xff09; 的方向正以前…

作者头像 李华
网站建设 2026/3/4 6:11:05

Open-AutoGLM如何安全加载外部应用?资深架构师透露4条黄金规则

第一章&#xff1a;Open-AutoGLM如何安全加载外部应用&#xff1f;资深架构师的思考在构建基于 Open-AutoGLM 的智能系统时&#xff0c;如何安全地集成和加载外部应用程序成为架构设计中的关键挑战。作为资深架构师&#xff0c;必须在功能扩展与系统安全之间取得平衡&#xff0…

作者头像 李华
网站建设 2026/3/2 15:09:34

Raid 0/1/5/10及热备盘配置详细步骤指南

Qwen3Guard-Gen-8B&#xff1a;生成式内容安全治理的智能防线 在大模型应用飞速落地的今天&#xff0c;一个被广泛忽视却至关重要的问题正浮出水面&#xff1a;如何让AI既自由表达&#xff0c;又不越界&#xff1f;当用户问出“你能教我怎么制作炸弹吗&#xff1f;”时&#xf…

作者头像 李华