Игнорировать определенное поле при сериализации с Джексоном - PullRequest
56 голосов
/ 04 января 2012

Я использую библиотеку Джексона.

Я хочу игнорировать определенное поле при сериализации / десериализации, например:

public static class Foo {
    public String foo = "a";
    public String bar = "b";

    @JsonIgnore
    public String foobar = "c";
}

Должно дать мне:

{
foo: "a",
bar: "b",
}

Но я получаю:

{
foo: "a",
bar: "b",
foobar: "c"
}

Я сериализую объект с этим кодом:

ObjectMapper mapper = new ObjectMapper();
String out = mapper.writeValueAsString(new Foo());

Реальный тип поля в моем классе - этоэкземпляр класса Log4J Logger.Что я делаю не так?

Ответы [ 3 ]

86 голосов
/ 04 января 2012

Хорошо, поэтому по какой-то причине я пропустил этот ответ .

Следующий код работает как положено:

@JsonIgnoreProperties({"foobar"})
public static class Foo {
    public String foo = "a";
    public String bar = "b";

    public String foobar = "c";
}

//Test code
ObjectMapper mapper = new ObjectMapper();
Foo foo = new Foo();
foo.foobar = "foobar";
foo.foo = "Foo";
String out = mapper.writeValueAsString(foo);
Foo f = mapper.readValue(out, Foo.class);
1 голос
/ 15 декабря 2015

Также стоит отметить, что это решение использует DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES: https://stackoverflow.com/a/18850479/1256179

0 голосов
/ 08 августа 2018

Ссылка от Как я могу сказать Джексону игнорировать свойство, для которого у меня нет контроля над исходным кодом?

Вы можете использовать Джексона Миксинса. Например:

class YourClass {
  public int ignoreThis() { return 0; }    
}

С этим миксином

abstract class MixIn {
  @JsonIgnore abstract int ignoreThis(); // we don't need it!  
}

С этим:

objectMapper.addMixIn(YourClass.class, MixIn.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...