杰克逊JSON映射的超类值

时间:2011-07-13 15:54:10

标签: java json spring jackson

我在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,但我不知道如何告诉杰克逊注意这个字段,而不修改父类(因为我不能修改它。)

2 个答案:

答案 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

我应该意识到这是可能的。我必须更新我的博文。谢谢。