我在Spring应用程序中使用Jackson 1.8.3将Java对象映射到JSON。
我的一个Java类(Child
)扩展了一个属于Libary的超类(Parent
),因此我无法对其进行修改。 (特别是我无法添加注释。)
我正在使用@JsonAutoDetect(JsonMethod.NONE)
因为我只需要对象中的一小部分字段,而是使用@JsonProperty
。
class Parent {
public long getId(){...};
...
}
@JsonAutoDetect(JsonMethod.NONE)
class Child extends Parent {
@JsonProperty
private String title;
}
但我需要的一个字段是来自超类的字段id
,但我不知道如何告诉杰克逊注意这个字段,而不修改父类(因为我不能修改它。)
答案 0 :(得分:7)
如果将注释放在getter上(而不是直接放在字段上),则可以覆盖getId()
方法(如果它不是超类中的final)并为其添加注释。
class Parent {
public long getId(){...};
...
}
@JsonAutoDetect(JsonMethod.NONE)
class Child extends Parent {
private String title;
@JsonProperty
public String getTitle() {...}
@Override
@JsonProperty
public long getId() {
return super.getId();
}
}
答案 1 :(得分:5)
我无法添加注释
您可以使用混合添加注释。有关详细信息,请参阅http://wiki.fasterxml.com/JacksonMixInAnnotations。
根据类feild /方法结构的其余部分,另一种可能有用的方法是通过ObjectMapper配置字段/方法的可见性访问。以下行演示了如何进行此类配置,而不一定是您需要的特定配置。
mapper.setVisibilityChecker(mapper.getVisibilityChecker().withFieldVisibility(Visibility.ANY));
我正在使用@JsonAutoDetect(JsonMethod.NONE),因为我只需要对象中的一小部分字段,而不是使用@JsonProperty
我应该意识到这是可能的。我必须更新我的博文。谢谢。