Java.util.Map zum JSON-Objekt mit Jersey / JAXB / Jackson
Ich versucht habe zu erstellen, die einen Jersey-REST-Webservice. Ich will zu empfangen und auszusenden, für die JSON Objekte aus Java-Klassen wie folgt:
@XmlRootElement
public class Book {
public String code;
public HashMap<String, String> names;
}
Dieser soll umgewandelt werden in das JSON so:
{
"code": "ABC123",
"names": {
"de": "Die fabelhafte Welt der Amelie",
"fr": "Le fabuleux destin d'Amelie Poulain"
}
}
Aber ich kann nicht finden, eine standard-Lösung für dieses. Jeder scheint zu sein, die Umsetzung seiner eigenen wrapper Lösung. Diese Anforderung scheint extrem basic zu mir; ich kann nicht glauben, dass dies die allgemein akzeptierte Lösung, vor allem, da der Jersey ist wirklich einer der mehr Spaß Teile von Java.
Ich habe auch versucht das Upgrade zu Jackson 1,8, die nur gibt mir das, ist extrem obfusicated JSON:
{
"code": "ABC123",
"names": {
"entry": [{
"key": "de",
"value": "Die fabelhafte Welt der Amelie"
},
{
"key": "fr",
"value": "Le fabuleux destin d'Amelie Poulain"
}]
}
}
Gibt es irgendwelche Lösungsvorschläge?
InformationsquelleAutor der Frage samy-delux | 2011-04-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß nicht, warum dies nicht die default Einstellung, und es dauerte eine Weile, es herauszufinden, aber wenn Sie wollen, arbeiten JSON Konvertierung mit Jersey, hinzufügen
Ihrem web.xml und alle Ihre Probleme gelöst werden sollten.
PS: Sie müssen auch, um loszuwerden, das
@XmlRootElement
Anmerkungen zu machen, arbeitenInformationsquelleAutor der Antwort Jan
Können Sie google-gson. Hier ist ein Beispiel-code:
Die Ausgabe ist
{"code":"1234","names":{"Some":"Name","Manish":"Pandit"}}
InformationsquelleAutor der Antwort lobster1234
Ich weiß, es ist gebeten worden, vor langer Zeit, aber Dinge änderten sich, meine Zeit, also für die neuesten Jersey v2.22, die nicht mehr das Paket com.Sonne.jerseydiese beiden Abhängigkeiten Hinzugefügt, die in das Projekt pom.xml löste das gleiche problem:
Nicht brauchen, um etwas in web.xml.
Ersten Abhängigkeit wird Sie anweisen, jersey verwenden jackson für POJO, um JSON-Transformationen.
Zweite Abhängigkeit, registrieren jackson als jersey JSON-Anbieter.
Auch für das null-problem in POJO, fügen Sie diese Anmerkung auf die POJO-Klasse:
InformationsquelleAutor der Antwort Lotzy
Natürlich müssen Sie getter/setter für jede Eigenschaft in Buch.
Auch der Grund, warum es empfohlen ist die Verwendung von wrapper-Klasse (die ist in der Regel eine Karte) ist zu vermeiden, erstellen Sie mehrere DTOs für jede Art von Daten, die Sie senden möchten. Es ist einfacher, einfach serialisieren/Deserialisieren mit einer Karte und als Teil der business-Logik wandeln Sie es in ein entsprechendes POJO für die interne Verarbeitung-besonders, wenn Sie verwenden, dass POJO für die Objekt-relationale mapping.
InformationsquelleAutor der Antwort Prasanna