簡體   English   中英

Jackson JSON 映射超類值

[英]Jackson JSON mapping of superclass value

I am using Jackson 1.8.3 in a Spring application to map Java Objects to JSON.

我的一個 Java Class( Child )擴展了一個超級 class( Parent ),它是庫的一部分,所以我無法修改它。 (特別是我無法添加注釋。)

我正在使用@JsonAutoDetect(JsonMethod.NONE)因為我只需要來自 object 的一小組字段,而不是使用@JsonProperty

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

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

    @JsonProperty
    private String title;
}

但是我需要的字段之一是來自超類的字段id ,但我不知道如何告訴Jackson注意這個字段,而不修改父class(因為我不能修改它)。

如果將注釋放在 getter 上(而不是直接放在字段上),則可以覆蓋getId()方法(如果它在超類中不是最終的)並為其添加注釋。

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();
    }
}

我無法添加注釋

您可以使用 mix-ins 添加注釋。 有關詳細信息,請參閱http://wiki.fasterxml.com/JacksonMixInAnnotations

根據 class 字段/方法結構的 rest 是什么,另一種可能有效的方法是通過 ObjectMapper 配置字段/方法的可見性訪問。 下面一行演示了如何進行這樣的配置,不一定是你需要的具體配置。

mapper.setVisibilityChecker(mapper.getVisibilityChecker().withFieldVisibility(Visibility.ANY));

我正在使用@JsonAutoDetect(JsonMethod.NONE),因為我只需要來自 object 的一小組字段,而我使用的是 @JsonProperty

我應該意識到這是可能的。 我必須更新我的博客文章。 謝謝你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM