目录
- 将返回 JSON 字段名转换为大写
- 背景
- 解决方案
- 1. **局部字段名转换为大写** — 使用 `@JsonNaming` 注解
- 方案概述
- 步骤
- 2. **全局字段名转换为大写** — 配置 `ObjectMapper`
- 方案概述
- 步骤
- 3. **手动指定字段名称** — 使用 `@JsonProperty` 注解
- 方案概述
- 步骤
- 4. **总结**
- 推荐方案
将返回 JSON 字段名转换为大写
背景
在 Java 后端开发中,使用 Jackson
将 Java 对象序列化为 JSON 数据时,可能有需求将字段名统一转换为大写。常见的需求包括:
- 需要与前端约定 JSON 字段名统一为大写
- 特定场景下需要对某些字段名做统一的命名规范
本文总结了几种常见的实现方式来满足这一需求。
解决方案
以下是三种不同的方案,用于将返回的 JSON 中的字段名转换为大写。
1. 局部字段名转换为大写 — 使用 @JsonNaming
注解
方案概述
通过创建一个自定义的命名策略类,并使用 @JsonNaming
注解在特定实体类中应用该策略,将该实体的所有字段名转换为大写。
步骤
- 创建自定义命名策略类
继承 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;}
}
- 在实体类上应用自定义命名策略
使用 @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;}
}
- 返回的 JSON
当返回 YourEntity
对象时,字段名会被自动转换为大写:
{"ID": "123","SDKO": "456"
}
2. 全局字段名转换为大写 — 配置 ObjectMapper
方案概述
通过配置 Spring Boot 中的 ObjectMapper
来全局应用大写的字段命名规则,使所有返回的 JSON 中的字段名都变为大写。
步骤
- 创建配置类并设置
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;}
}
- 返回的 JSON
所有返回的 JSON 字段都会自动转换为大写:
{"ID": "123","SDKO": "456"
}
3. 手动指定字段名称 — 使用 @JsonProperty
注解
方案概述
如果只需要对个别字段进行大写转换,可以通过 @JsonProperty
注解为字段手动指定名称,将字段名转换为大写。
步骤
- 在字段上使用
@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;}
}
- 返回的 JSON
此时,只有带有 @JsonProperty
注解的字段名会变为大写:
{"ID": "123","SDKO": "456"
}
4. 总结
方案 | 描述 | 优势 | 适用场景 |
---|---|---|---|
局部字段名转换 | 使用 @JsonNaming 注解和自定义 PropertyNamingStrategy | 仅对特定实体类生效,灵活控制 | 只需对特定实体类或场景中的字段进行命名转换 |
全局字段名转换 | 配置 ObjectMapper 使用自定义命名策略 | 全局生效,所有 JSON 字段名统一转换为大写 | 需要所有返回 JSON 的字段名都进行大写转换 |
手动指定字段名 | 使用 @JsonProperty 注解手动指定字段名称 | 精确控制字段的名称转换,仅对个别字段生效 | 只需要个别字段转换,且不想影响其他字段的命名 |
推荐方案
- 局部字段名转换:如果你只需要对某个特定实体类的字段进行大写转换,使用
@JsonNaming
注解结合自定义命名策略最为合适。 - 全局字段名转换:如果你的应用中所有字段都需要转换为大写,可以配置
ObjectMapper
进行全局处理。 - 手动指定字段名:如果只想对部分字段进行大写转换,可以使用
@JsonProperty
注解进行精确控制。
根据实际需求,选择最适合的方案来实现字段名转换为大写的功能。
希望对你有所帮助,若有问题欢迎指正~😊