杰克逊JSON映射的超类值

Ral*_*lph 4 java spring json jackson

我在Spring应用程序中使用Jackson 1.8.3将Java对象映射到JSON.

我的一个Java Class(Child)扩展了一个超类(Parent),它是Libary的一部分,所以我无法修改它.(特别是我无法添加注释.)

我正在使用,@JsonAutoDetect(JsonMethod.NONE)因为我只需要来自对象的一小部分字段,而不是我正在使用的@JsonProperty.

class Parent {
  public long getId(){...};
  ...
}

@JsonAutoDetect(JsonMethod.NONE)
class Child extends Parent {

    @JsonProperty
    private String title;
}
Run Code Online (Sandbox Code Playgroud)

但我需要的一个领域是id来自超类的字段,但我不知道如何告诉杰克逊注意这个字段,而不修改父类(因为我无法修改它).

Nic*_*lbu 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这是最务实的方式.但我使用了程序员布鲁斯提到的方法,因为它分离了不同的问题. (2认同)

Pro*_*uce 5

我无法添加注释

您可以使用混合添加注释.有关详细信息,请参阅http://wiki.fasterxml.com/JacksonMixInAnnotations.

根据类feild /方法结构的其余部分,另一种可能有用的方法是通过ObjectMapper配置字段/方法的可见性访问.以下行演示了如何进行此类配置,而不一定是您需要的特定配置.

mapper.setVisibilityChecker(mapper.getVisibilityChecker().withFieldVisibility(Visibility.ANY));
Run Code Online (Sandbox Code Playgroud)

我正在使用@JsonAutoDetect(JsonMethod.NONE)因为我只需要来自对象的一小部分字段,而是使用@JsonProperty

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