
本文详解如何在 Spring Boot 项目中使用 Gson(而非 Jackson)时,将 Java 字段 backGround 序列化为指定 JSON 键名 "BackGround",关键在于正确使用 @SerializedName 注解替代 Jackson 的 @JsonProperty。
本文详解如何在 spring boot 项目中使用 gson(而非 jackson)时,将 java 字段 `background` 序列化为指定 json 键名 `"background"`,关键在于正确使用 `@serializedname` 注解替代 jackson 的 `@jsonproperty`。
在 Spring Boot 项目中,若你同时引入了 Jackson 和 Gson(如示例中混用 ObjectMapper 和 new Gson().toJson()),需特别注意:注解与序列化器必须严格匹配。@JsonProperty 是 Jackson 专用注解,对 Gson 完全无效;而 Gson 识别的是 com.google.gson.annotations.SerializedName。
要实现预期输出 { "BackGround": "value" },请按以下步骤修正代码:
✅ 正确做法(Gson 专用):
import com.google.gson.annotations.SerializedName;
@Data
public class EmpPojo {
@SerializedName("BackGround") // ← Gson 唯一识别的字段映射注解
private String backGround;
}
⚠️ 注意事项:
- 不要同时依赖
@JsonProperty和 Gson —— 它会被忽略,导致仍输出默认小驼峰键"backGround"; - 确保已引入 Gson 依赖(Maven):
<dependency><groupid>com.google.code.gson</groupid><artifactid>gson</artifactid></dependency>
- 若项目全局使用 Gson(如
@RestController返回 JSON),建议统一配置GsonHttpMessageConverter,避免混用 Jackson 的ObjectMapper; -
@SerializedName同时支持序列化(Java → JSON)和反序列化(JSON → Java),双向生效。
? 示例完整调用(验证有效):
Gson gson = new Gson();
EmpEntity ent = new EmpEntity();
ent.setBackGround("value");
String json = gson.toJson(new EmpPojo(ent.getBackGround())); // 假设 Pojo 有对应构造器
System.out.println(json); // 输出:{"BackGround":"value"}
? 总结:框架生态决定注解归属——Jackson 用 @JsonProperty,Gson 必须用 @SerializedName。切勿跨框架复用注解,这是序列化键名不生效的最常见原因。











