如何重命名子类的JSON属性

时间:2017-06-29 12:42:51

标签: java json annotations jackson fasterxml

这是一个简单的例子: 假设我有两个类,MyEntity和Person:

public class MyEntity {
  long id;
  String name;
}

public class Person extends MyEntity {
  String lastName;
  int age;
  // other fields
}

到目前为止没问题。现在我希望使用Jackson注释将它们解析为JSON。假设我有许多扩展MyEntity的其他实体,并且所有实体都有JSON字段name,但特别是name必须在lastName类中解析为Person。有没有办法做到这一点?对我来说合乎逻辑的是一个注释(我编写了这段代码!!只是为了得到这个想法):

@JSONFieldValue(subClass = Person.class, field = "name", JSONName = "lastName")
public class MyEntity{}

你们知道有什么方法可以达到这样的目的吗?

提前致谢!

1 个答案:

答案 0 :(得分:2)

Jackson默认使用setter方法进行反序列化,并根据Java bean约定通过setter方法名称推断JSON字段名称。

要将名为name的JSON字段解析为名为lastName的Java类字段,只需在Person添加此setter:

void setName(String name) {
    lastName = name;
}

或注释Person中的普通二传手:

@JsonProperty( "name" )
void setLastName(String lastName) {
    this.lastName = lastName;
}