383 votes

Sérialisation avec Jackson (JSON) - Obtenir "Aucun sérialiseur trouvé"?

Je reçois l'une exception lorsque vous tentez de sérialiser un objet très simple à l'aide de Jackson. Le message d'erreur:

org.codehaus.jackson.carte.JsonMappingException: Aucun processus trouvé pour classe MyPackage.TestA et pas de propriétés découvert à créer BeanSerializer (pour éviter d'exception, désactiver SerializationConfig.Fonctionnalité.FAIL_ON_EMPTY_BEANS) )

Ci-dessous est la classe simple et le code de sérialiser.

Quelqu'un peut-il dire à mon pourquoi j'ai cette erreur?

public class TestA {
    String SomeString = "asd";
}

TestA testA = new TestA();
ObjectMapper om = new ObjectMapper();
try {
    String testAString = om.writeValueAsString(testA); // error here!

    TestA newTestA = om.readValue(testAString, TestA.class);
} catch (JsonGenerationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (JsonMappingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

464voto

Programmer Bruce Points 16306

Comme déjà décrit, la configuration par défaut de ObjectMapper instance est seulement d'accéder à des propriétés qui sont des champs publics ou public, d'avoir des getters/setters. Une alternative à la modification de la définition de classe pour en faire un terrain public ou de fournir une getter/setter est à préciser (pour le sous - VisibilityChecker) une propriété différente de la visibilité à la règle. Jackson 1.9 fournit l' ObjectMapper.setVisibility() de commodité méthode pour le faire. Pour l'exemple dans la question d'origine, je serais probablement configurer ceci

myObjectMapper.setVisibility(JsonMethod.FIELD, Visibility.ANY);

Pour plus d'informations et de détails sur les options de configuration, je vous recommandons de consulter la Javadoc sur ObjectMapper.setVisibility().

92voto

Chris Points 10237

Pour que Jackson puisse sérialiser cette classe, le champ SomeString doit être public (actuellement, c'est l'isolation au niveau du paquet) ou vous devez définir un getter et un configurateur.

43voto

Martín C Points 11

Le problème dans mon cas était de jackson a été d'essayer de sérialiser un objet vide sans attributs ni les méthodes.

Comme suggéré dans l'exception que j'ai ajouté la ligne suivante pour éviter l'échec sur vide haricots

Pour jackson 1.9 myObjectMapper.configurer(SerializationConfig.Fonctionnalité.FAIL_ON_EMPTY_BEANS, false);

Pour jackson 2.X myObjectMapper.configurer(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);

Vous pouvez trouver un exemple simple sur jackson désactiver fail_on_empty_beans

Espérons que cela aide!

8voto

patrics Points 573

Cette erreur est également générée si vous oubliez d'ajouter la méthode .build () à votre statut de retour.

 return Response.status(Status.OK);         // fails
return Response.status(Status.OK).build(); // works
 

J'ai eu l'erreur suivante sans la méthode build ():

 org.codehaus.jackson.map.JsonMappingException: No serializer found for class com.sun.jersey.core.spi.factory.ResponseBuilderImpl
 

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