You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Spring Boot中如何让POJO返回结果键名与类变量名不同

解决方案

你的问题出在混用了Gson和Jackson两个JSON处理库,且没有正确利用Jackson的注解完成最终序列化。以下是修正方案:

核心问题说明

  • @JsonProperty是Jackson库的专属注解,Gson无法识别它。你先用Gson把EmpEntity序列化为JSON(此时键名是backGround),再用Jackson反序列化为EmpPojo,这一步能完成字段映射,但如果最终序列化EmpPojo时用了Gson,依然会输出backGround而非BackGround。
  • Spring Boot默认使用Jackson作为JSON处理工具,建议统一用Jackson完成所有序列化/反序列化操作,避免库冲突。

修改后的代码实现

1. 保持实体类和DTO类不变(补充Entity的getter/setter)

@Entity 
public class EmpEntity {
    private String backGround;
    
    // 补充getter/setter,让Jackson能访问字段
    public String getBackGround() {
        return backGround;
    }

    public void setBackGround(String backGround) {
        this.backGround = backGround;
    }
}

@Data
public class EmpPojo {
    @JsonProperty("BackGround")
    private String backGround;
}

2. 统一用Jackson完成转换与序列化

ObjectMapper objectMapper = new ObjectMapper();
EmpEntity ent = new EmpEntity();
ent.setBackGround("value");

// 直接用Jackson将EmpEntity转换为EmpPojo,无需中转JSON字符串
EmpPojo pojo = objectMapper.convertValue(ent, EmpPojo.class);

// 序列化EmpPojo为JSON,此时会按照@JsonProperty指定的键名输出
String resultJson = objectMapper.writeValueAsString(pojo);

3. 预期输出

执行后resultJson的内容为:

{
  "BackGround": "value"
}

备选方案:如果必须使用Gson

若项目依赖Gson,需将EmpPojo的注解替换为Gson的@SerializedName:

@Data
public class EmpPojo {
    @SerializedName("BackGround")
    private String backGround;
}

转换代码改为全用Gson:

Gson gson = new Gson();
EmpEntity ent = new EmpEntity();
ent.setBackGround("value");
EmpPojo pojo = gson.fromJson(gson.toJson(ent), EmpPojo.class);
String resultJson = gson.toJson(pojo);

内容的提问来源于stack exchange,提问作者iswarya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 12:20:24