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

Java Jackson序列化时修改对象属性名称的问题

Java Jackson序列化时修改对象属性名称的问题

嗨,我看你遇到了Jackson序列化时属性名映射的问题,其实你用错注解啦!你之前尝试的@JsonTypeName和@JsonTypeInfo是用来处理多态类型序列化的(比如父类有多个子类时标记类型),不是用来修改单个属性的JSON键名的,这就是为什么会出现额外嵌套的原因。

正确的解决方法:使用@JsonProperty注解

你只需要在Classification类里的studentClass属性(或者对应的getter方法)上添加@JsonProperty("class")注解,直接指定它在JSON中显示的名称就可以了。

修改后的代码示例

public class Classification {
    private Department department;
    // 直接在属性上添加注解指定JSON键名
    @JsonProperty("class")
    private StudentClass studentClass;

    // 对应的getters和setters保持不变
    public Department getDepartment() {
        return department;
    }

    public void setDepartment(Department department) {
        this.department = department;
    }

    public StudentClass getStudentClass() {
        return studentClass;
    }

    public void setStudentClass(StudentClass studentClass) {
        this.studentClass = studentClass;
    }
}

如果你习惯在getter方法上添加注解(有时候更符合JavaBean规范),也可以这么写:

public class Classification {
    private Department department;
    private StudentClass studentClass;

    public Department getDepartment() {
        return department;
    }

    public void setDepartment(Department department) {
        this.department = department;
    }

    // 在getter上添加注解
    @JsonProperty("class")
    public StudentClass getStudentClass() {
        return studentClass;
    }

    public void setStudentClass(StudentClass studentClass) {
        this.studentClass = studentClass;
    }
}

修改后的效果

这样序列化后就能得到你想要的JSON输出了:

{
    "classification": {
        "department": {
            "id": 123,
            "title": "Healthcare"
        },
        "class": {
            "id": 456,
            "title": "blah"
        }
    }
}

简单来说,@JsonProperty就是Jackson用来指定属性和JSON键名映射关系的核心注解,专门解决这类属性名和JSON键名不一致的问题,完全适配你的需求~

备注:内容来源于stack exchange,提问作者uv2209

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 11:54:29