848 votes

Jackson avec JSON : champ non reconnu, ne pas marqué comme pouvant être ignoré

J'ai besoin de convertir un certain chaîne JSON à un objet Java. Je suis à l'aide de Jackson pour JSON de la manipulation. Je n'ai pas de contrôle sur l'entrée JSON (je l'ai lu à partir d'un service web). C'est mon entrée JSON:

{"wrapper":[{"id":"13","name":"Fred"}]}

Ici est simplifié cas d'utilisation:

private void tryReading() {
    String jsonStr = "{\"wrapper\"\:[{\"id\":\"13\",\"name\":\"Fred\"}]}";
    ObjectMapper mapper = new ObjectMapper();  
    Wrapper wrapper = null;
    try {
        wrapper = mapper.readValue(jsonStr , Wrapper.class);
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println("wrapper = " + wrapper);
}

Ma classe d'entité est:

public Class Student { 
    private String name;
    private String id;
    //getters & setters for name & id here
}

Ma classe Wrapper est essentiellement un objet de conteneur pour obtenir ma liste d'élèves:

public Class Wrapper {
    private List<Student> students;
    //getters & setters here
}

Je reçois cette erreur et de "wrapper" les retours null. Je ne suis pas sûr de ce qu'il manque. Quelqu'un peut-il aider s'il vous plaît?

org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "wrapper" (Class Wrapper), not marked as ignorable
 at [Source: java.io.StringReader@1198891; line: 1, column: 13] (through reference chain: Wrapper["wrapper"])
 at org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53)

1208voto

Ariel Kogan Points 2371

Vous pouvez utiliser des annotations de niveau classe de Jackson :

Il ignorera chaque propriété que vous n’avez pas défini dans votre POJO. Très utile lorsque vous cherchez juste un couple des propriétés dans le JSON et ne veux pas écrire le mappage complet. Plus d’infos sur le site Web de Jackson. Si vous voulez ignorer toute propriété non déclarée, vous devez écrire :

632voto

Suresh Points 1043

Vous pouvez utiliser

Il ignorera toutes les propriétés qui ne sont pas déclarées.

143voto

StaxMan Points 34626

La première réponse est presque correcte, mais ce qui est nécessaire est de changer la méthode d’accesseur Get, pas zone--champ est privé (et pas détecté automatiquement) ; en outre, les getters ont préséance sur champs si les deux sont visibles. (il existe des façons de rendre privés champs visibles, trop, mais si vous voulez avoir getter il ne sert pas beaucoup)

Alors getter devrait être nommé « getWrapper() » ou annotée avec :

Si vous préférez le nom de la méthode d’accesseur Get comme c’est.

47voto

Felix Kimutua Points 111

Cela a fonctionné parfaitement pour moi

``annotation n’a pas.

44voto

user2542697 Points 61
    This works better than All please refer to this property............

    import com.fasterxml.jackson.databind.DeserializationFeature;
    import com.fasterxml.jackson.databind.ObjectMapper;

   ObjectMapper objectMapper = new ObjectMapper();
   objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
   projectVO = objectMapper.readValue(yourjsonstring, Test.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