it-swarm.com.de

Ignorieren Sie ein bestimmtes Feld bei der Serialisierung mit Jackson

Ich benutze die Jackson-Bibliothek.

Ich möchte ein bestimmtes Feld beim Serialisieren/Deserialisieren ignorieren, also zum Beispiel:

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

    @JsonIgnore
    public String foobar = "c";
}

Sollte mir geben:

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

Aber ich bekomme:

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

Ich serialisiere das Objekt mit diesem Code:

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

Der tatsächliche Typ des Felds in meiner Klasse ist eine Instanz der Log4J-Logger-Klasse. Was mache ich falsch?

56

Ok, also aus irgendeinem Grund habe ich diese Antwort verpasst.

Der folgende Code funktioniert wie erwartet:

@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);
86

Erwähnenswert ist auch diese Lösung, die DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES verwendet: https://stackoverflow.com/a/18850479/1256179

1
rwblackburn

Referenz von Wie kann ich jackson mitteilen, dass er eine Eigenschaft ignoriert, für die ich keinen Einfluss auf den Quellcode habe?

Sie können Jackson Mixins verwenden. Zum Beispiel:

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

Mit diesem Mixin

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

Mit diesem:

objectMapper.addMixIn(YourClass.class, MixIn.class);
0
Tong