Serialisierung mit Jackson (JSON) - "Kein Serializer gefunden"?
Bekomme ich eine exception wenn man versucht zu serialisieren ein sehr einfaches Objekt mit Jackson. Der Fehler:
org.codehaus.jackson.Karte.JsonMappingException: Keine serializer gefunden
Klasse MyPackage.TestA und keine Eigenschaften
entdeckt zu erstellen BeanSerializer (um zu vermeiden, Ausnahme, deaktivieren
SerializationConfig.Funktion.FAIL_ON_EMPTY_BEANS) )
Unten ist die einfach Klasse und der code zum serialisieren.
Kann mir jemand sagen, meine, warum bekomme ich diesen Fehler?
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();
}
InformationsquelleAutor der Frage Ted | 2011-12-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie bereits beschrieben, die Standard-Konfiguration eines
ObjectMapper
Instanz ist nur auf Eigenschaften zugreifen, die öffentliche Felder oder über öffentliche Getter/setter. Eine alternative zur änderung der definition der Klasse zu machen, einen öffentlichen Bereich oder um eine öffentliche getter/setter zu geben (zu den zugrunde liegendenVisibilityChecker
) eine andere Eigenschaft der Sichtbarkeit Regel. Jackson 1.9 bietet dieObjectMapper.setVisibility()
bequeme Methode, um dies zu tun. Für das Beispiel in die ursprüngliche Frage, ich würde wahrscheinlich konfigurieren Sie diese alsWeitere Informationen und details auf der zugehörigen Konfigurations-Optionen, empfehle ich die überprüfung die JavaDocs auf
ObjectMapper.setVisibility()
.InformationsquelleAutor der Antwort Programmer Bruce
Jackson zu serialisieren, die Klasse, die
SomeString
Feld muss entwederpublic
(im Moment ist es bei package-level-isolation) oder Sie müssen definieren, getter-und setter-Methoden für Sie.InformationsquelleAutor der Antwort Chris
Ich habe das gleiche problem in meinem Quellcode. Ich habe gerade
und
ist das problem gelöst.
InformationsquelleAutor der Antwort Günay Gültekin
Das problem in meinem Fall war Jackson versucht hatte, Sie zu serialisieren, die ein leeres Objekt ohne Attribute noch Methoden.
Wie vorgeschlagen, die Ausnahme habe ich noch folgende Zeile Fehler zu vermeiden, die auf leerem Bohnen:
Jackson 1.9
Jackson 2.X
Finden Sie ein einfaches Beispiel auf jackson deaktivieren fail_on_empty_beans
InformationsquelleAutor der Antwort Martín C
Wenn Sie können, Bearbeiten Sie die Klasse, das Objekt enthält, die ich in der Regel fügen Sie einfach die annotation
InformationsquelleAutor der Antwort ZiglioUK
Ich hatte das gleiche problem für ein Kind der Klasse, wo ich hatte die Kontrolle, Objekt-mapper wurde in einem gemeinsamen Modul und unzugänglich war. Ich löste es durch hinzufügen dieser Annotationen für mein Kind Klasse, deren Objekt serialisiert werden kann.
InformationsquelleAutor der Antwort Pavan Kumar
Dieser Fehler wird auch ausgegeben, wenn Sie vergessen haben, fügen Sie die .die Methode build() auf Ihren status zurückgegeben.
Bekam ich folgende Fehler, ohne die Methode build ():
InformationsquelleAutor der Antwort patrics
Für Oracle -, Java-Anwendungen, fügen Sie diese nach der
ObjectMapper
Instanziierung:InformationsquelleAutor der Antwort LEM Adane
Kann das problem sein, weil Sie erklärt haben, eine variable als
private
.Wenn Sie es ändern, um
public
es funktioniert.Bessere option ist die Verwendung von getter-und setter-Methoden für Sie.
Dieser das Problem lösen wird!
InformationsquelleAutor der Antwort Sanchit Singhania
Ich hatte ein ähnliches problem mit lazy loading über die hibernate-proxy-Objekt. Hab um es durch die Annotation der Klasse mit lazy geladen werden private Eigenschaften mit:
InformationsquelleAutor der Antwort N. berouain
Obwohl ich Getter und setter war ich immer die gleichen Fehler. Später ich habe einen Fehler gefunden, das ist von Sonar Rat, den ich cgahnged die Getter und setter als geschützt, das war das Problem verursacht. Sobald ich fest, dass es funktionierte, wie exppected.
InformationsquelleAutor der Antwort yellow
Fand ich mindestens drei Möglichkeiten, dies zu tun:
public getters
auf Ihre Person, die Sie versuchen, zu serialisieren;public getters
. Dies ändert die Standardeinstellung für Jackson ausVisbility=DEFAULT
zu@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
wo alle zugriffsmodifizierer akzeptiert werden;ObjectMapper
Global über die EinstellungobjectMapperInstance.setVisibility(JsonMethod.FIELD, Visibility.ANY);
. Dies sollte vermieden werden, wenn Sie nicht benötigen diese Funktion Global.Wählen Sie auf der Grundlage Ihrer Bedürfnisse.
InformationsquelleAutor der Antwort georger