61 votes

Ignorer un champ spécifique lors de la sérialisation avec Jackson

Je suis en train d'utiliser la bibliothèque Jackson.

Je veux ignorer un champ spécifique lors de la sérialisation/désérialisation, par exemple:

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

    @JsonIgnore
    public String foobar = "c";
}

Devrait me donner:

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

Mais je reçois:

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

Je suis en train de sérialiser l'objet avec ce code:

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

Le vrai type du champ dans ma classe est une instance de la classe de journalisation Log4J. Qu'est-ce que je fais mal?

90voto

Edison Gustavo Muenz Points 2751

D'accord, pour une raison quelconque j'ai manqué cette réponse.

Le code suivant fonctionne comme prévu:

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

    public String foobar = "c";
}

//Code de test
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);

1voto

rwblackburn Points 361

À noter également cette solution en utilisant DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES: https://stackoverflow.com/a/18850479/1256179

0voto

Tong Points 159

Référence de Comment puis-je dire à jackson d'ignorer une propriété pour laquelle je n'ai pas le contrôle sur le code source?

Vous pouvez utiliser des Mixins Jackson. Par exemple:

class VotreClasse {
  public int ignorerCeci() { return 0; }    
}

Avec ce Mixin

abstract class MixIn {
  @JsonIgnore abstract int ignorerCeci(); // on n'en a pas besoin!
}

Avec ceci:

objectMapper.addMixIn(VotreClasse.class, MixIn.class);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X