Джексон JSON отображение суперкласса - PullRequest
4 голосов
/ 13 июля 2011

Я использую Jackson 1.8.3 в приложении Spring для сопоставления объектов Java с JSON.

Один из моих классов Java (Child) расширяет суперкласс (Parent), который является частью Libary, поэтому я не могу его изменить. (Особенно я не могу добавлять аннотации.)

Я использую @JsonAutoDetect(JsonMethod.NONE), потому что мне нужен только небольшой набор полей из объекта, вместо этого я использую @JsonProperty.

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

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

    @JsonProperty
    private String title;
}

Но одно из необходимых мне полей - это поле id из суперкласса, но я не знаю, как сказать Джексону обратить внимание на это поле, не изменяя родительский класс (потому что я не могу изменить его).

Ответы [ 2 ]

7 голосов
/ 13 июля 2011

Если вы помещаете аннотации в геттеры (вместо этого непосредственно в поля), вы можете переопределить метод 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();
    }
}
5 голосов
/ 13 июля 2011

Я не могу добавить аннотации

Вы можете добавлять аннотации, используя дополнения. Подробнее см. http://wiki.fasterxml.com/JacksonMixInAnnotations.

В зависимости от того, каковы остальные структуры класса / структуры / метода, другой подход, который может сработать, заключается в настройке доступа к полям / методам видимости через ObjectMapper. Следующая строка демонстрирует, как сделать такую ​​конфигурацию, не обязательно ту конфигурацию, которая вам нужна.

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

Я использую @JsonAutoDetect (JsonMethod.NONE), потому что мне нужен только небольшой набор полей из объекта, вместо этого я использую @ JsonProperty

Я должен был понять, что это возможно. Я должен обновить свой блог. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...