146 votes

Comment désactiver fail_on_empty_beans dans Jackson ?

Si j'utilise jackson 2.1, comment puis-je désactiver l'option d'accès à l'Internet ? fail_on_empty beans que le message d'erreur semble vouloir que je désactive ?

Je suppose que c'est la chose la plus simple du monde, mais il est tard et je n'ai pas été en mesure de trouver un tutoriel simple ou quelque chose de particulièrement évident à partir de la page d'accueil du site. api . SerializationFactory ? Pourquoi le rendre si peu intuitif et faire en sorte que le message d'erreur semble si simple ?

Bien que je hacer comme le message d'erreur, je veux dire, c'est mieux qu'un NPE.

Je suppose qu'il y a un moyen de le faire en utilisant des annotations - mais je n'ai pas du tout envie de les utiliser pour le travail simpliste que je fais !

166voto

Pancakeo Points 1486

Vous pouvez le faire par classe ou globalement, je crois.

Pour chaque classe, essayez @JsonSerialize au-dessus de la déclaration de classe.

Pour un mappeur, voici un exemple :

ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
// do various things, perhaps:
String someJsonString = mapper.writeValueAsString(someClassInstance);
SomeClass someClassInstance = mapper.readValue(someJsonString, SomeClass.class)

Le lien StackOverflow ci-dessous contient également un exemple pour un projet Spring.

Pour REST avec Jersey, je ne me souviens pas du tout, mais je crois que c'est similaire.


Quelques liens que j'ai dénichés : (le premier lien a été modifié en raison de la fermeture de Codehaus).

87voto

abhishek jain Points 741

Si vous utilisez Spring Boot, vous pouvez définir la propriété suivante dans le fichier application.properties. spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false

29voto

user1913615 Points 92

Si vous souhaitez obtenir un objet JSON sans champs supplémentaires, ajoutez cette annotation à votre classe, cela a parfaitement fonctionné pour moi.

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})

Vous pouvez également ajouter cette ligne dans votre fichier application.properties, mais cela ajoutera un champ supplémentaire à votre JSON.

spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false

26voto

RJStanford Points 131

Vous pouvez également rencontrer le même problème si votre classe ne contient pas de méthodes/propriétés publiques. J'ai normalement des DTOs dédiés aux demandes et réponses API, déclarés publics, mais j'ai oublié dans un cas de rendre les méthodes publiques également - ce qui a causé le haricot "vide" en premier lieu.

11voto

AllDayAmazing Points 309

Vous pouvez aussi probablement annoter la classe avec @JsonIgnoreProperties(ignoreUnknown=true) pour ignorer les champs non définis dans la classe

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