Как глобально удалить атрибут из сериализации JSON Джексона? - PullRequest
3 голосов
/ 09 февраля 2012

У меня есть граф объектов, который содержит объекты, которые (для целей данного примера) являются подклассами типа Foo. Класс Foo имеет атрибут bar, который я не хочу сериализовать с моим графом объектов. Поэтому я хочу сказать, что всякий раз, когда вы сериализуете объект типа Foo, выводите все, кроме bar.

class Foo { // this is an external dependency
    public long getBar() { return null; } 
}

class Fuzz extends Foo {
    public long getBiz() { return null; }
}

public static void main(String[] args) {
    ObjectMapper mapper = new ObjectMapper();
    // I want to set a configuration on the mapper to
    // exclude bar from all things that are type Foo

    Fuzz fuzz = new Fuzz();
    System.out.println(mapper.writeValueAsString(fuzz));
    // writes {"bar": null, "biz": null} what I want is {"biz": null}
}

Спасибо, Выкуп

Редактировать: Использовал предложение StaxMan, включая код, который я бы в итоге использовал (и сделал, например, bar геттером)

interface Mixin {
    @JsonIgnore long getBar();
}

class Example {
    public static void main() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.getSerializationConfig().addMixInAnnotations(Foo.class, Mixin.class);
        Fuzz fuzz = new Fuzz();
        System.out.println(mapper.writeValueAsString(fuzz));
        // writes {"biz": null} whoo!
    }
} 

1 Ответ

3 голосов
/ 09 февраля 2012

Помимо @JsonIgnore или @JsonIgnoreProperties (особенно через Смешанные аннотации ), вы также можете определить конкретные типы, которые будут игнорироваться глобально с помощью @JsonIgnoreType.Для сторонних типов это также может быть применено как дополнительная аннотация.

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