type - work with json java




Vous voulez masquer certains champs d'un objet mappé vers JSON par Jackson (4)

En ajoutant ceci ici parce que quelqu'un d'autre peut chercher à nouveau dans l'avenir, comme moi. Cette réponse est une extension de la réponse acceptée.

You have two options:

1. Jackson works on setters-getters of fields. So, you can just remove getter of field which you want to omit in JSON. ( If you don't need getter at other place.)

2. Or, you can use the `@JsonIgnore` [annotation of Jackson][1] on getter method of that field and you see there in no such key-value pair in resulted JSON. 

        @JsonIgnore
        public int getSecurityCode(){
           return securityCode;
        }

En fait, la nouvelle version de Jackson a ajouté les arguments d'annotation READ_ONLY et WRITE_ONLY pour JsonProperty . Donc, vous pouvez aussi faire quelque chose comme ça.

@JsonProperty(access = Access.WRITE_ONLY)
private String securityCode;

au lieu de

@JsonIgnore
public int getSecurityCode(){
  return securityCode;
}

Je souhaite mapper une classe d'utilisateurs vers JSON à l'aide de Jackson.

public class User {
    private String name;
    private int age;
    prviate int securityCode;

    // getters and setters
}

Je mappe cela à une chaîne JSON en utilisant -

User user = getUserFromDatabase();

ObjectMapper mapper = new ObjectMapper();   
String json =  mapper.writeValueAsString(user);

Je ne veux pas mapper la variable securityCode . Existe-t-il un moyen de configurer le mappeur pour qu'il ignore ce champ?

Je sais que je peux écrire des mappeurs de données personnalisés ou utiliser l'API Streaming, mais j'aimerais savoir s'il est possible de le faire via la configuration?


Si vous ne souhaitez pas mettre d'annotations sur vos Pojos, vous pouvez également utiliser Genson .

Voici comment vous pouvez exclure un champ sans annotations (vous pouvez également utiliser des annotations si vous le souhaitez, mais vous avez le choix).

Genson genson = new Genson.Builder().exclude("securityCode", User.class).create();
// and then
String json = genson.serialize(user);

Vous avez deux options:

  1. Jackson travaille sur les setters-getters des champs. Donc, vous pouvez simplement supprimer le getter du champ que vous voulez omettre en JSON. (Si vous n'avez pas besoin de getter à un autre endroit.)

  2. Ou bien, vous pouvez utiliser l' annotation @JsonIgnore de Jackson sur la méthode getter de ce champ et vous ne le voyez pas dans une telle paire clé-valeur dans le résultat JSON.

    @JsonIgnore
    public int getSecurityCode(){
       return securityCode;
    }

vous pouvez également rassembler toutes les propriétés sur une classe d'annotation

@JsonIgnoreProperties( { "applications" })
public MyClass ...

String applications;






jackson