/ / Jackson ignora campos ao escrever - java, jackson

Jackson ignora campos ao escrever - java, jackson

Eu estou lendo este objeto de JSON usando a biblioteca de Jackson:

{
a = "1";
b = "2";
c = "3";
}

Eu estou analisando isso usando mapper.readValue(new JsonFactory().createJsonParser(json), MyClass.class);

Agora eu quero imprimir o objeto para JSON, usando mapper.writeValueAsString(object), mas eu quero ignorar o campo "c". Como posso conseguir isso? Adicionando @JsonIgnore para o campo impediria que o campo seja definido durante a análise, não seria?

Respostas:

10 para resposta № 1

Você não pode fazer isso usando campos públicos, você tem que usar métodos (getter / setter). Com Jackson 1.x, você simplesmente precisa adicionar @JsonIgnore para o método getter e um método setter sem anotação, ele funcionará. Jackson 2.x, resolução de anotação foi retrabalhada e você precisará colocar @JsonIgnore no getter E @JsonProperty no setter.

public static class Foo {
public String a = "1";
public String b = "2";
private String c = "3";

@JsonIgnore
public String getC() { return c; }

@JsonProperty // only necessary with Jackson 2.x
public String setC(String c) { this.c = c; }
}

0 para resposta № 2

Você pode usar @JsonIgnoreProperties({"c"}) durante a serialização do objeto.

@JsonIgnoreProperties({"c"})
public static class Foo {
public String a = "1";
public String b = "2";
public String c = "3";
}

//Testing
ObjectMapper mapper = new ObjectMapper();
Foo foo = new Foo();
foo.a = "1";
foo.b = "2";
foo.c = "3";
String out = mapper.writeValueAsString(foo);
Foo f = mapper.readValue(out, Foo.class);