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
相关产品推荐
相关产品推荐

