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 № 1Você 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);