2013-04-29 4 views
1

Я читаю этот объект из JSON с помощью библиотеки Джексона:Джексон игнорировать поля при написании

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

Я разбор это с помощью mapper.readValue(new JsonFactory().createJsonParser(json), MyClass.class);

Теперь я хочу, чтобы напечатать объект JSON, используя mapper.writeValueAsString(object), но я хочу игнорировать поле 'c'. Как я могу это достичь? Добавление @JsonIgnore в поле предотвратит установку поля при разборе, не так ли?

ответ

9

Вы не можете сделать это, используя общедоступные поля, вы должны использовать методы (getter/setter). С Jackson 1.x вам просто нужно добавить @JsonIgnore в метод getter и метод setter без аннотации, он будет работать. Jackson 2.x, разрешение аннотации было переработано, и вам нужно будет поставить @JsonIgnore на получателе И @JsonProperty на сеттер.

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

Вы можете использовать @JsonIgnoreProperties({"c"}) при сериализации объекта.

@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); 
+2

Не будет ли игнорировать поле при десериализации? – nhaarman

Смежные вопросы