Das serialisieren von Java-primitiven mit Jersey REST
In meiner Anwendung verwende ich Jersey-REST zum serialisieren von komplexen Objekten. Das funktioniert ganz gut. Aber es gibt ein paar Verfahren, die einfach mit return einen int-oder boolean.
Jersey können nicht mit primitiven Typen (nach meinem wissen), wahrscheinlich, weil Sie nicht kommentiert und Jersey hat keine Standard-annotation für Sie. Ich arbeitete um, dass durch die Schaffung von komplexen Typen wie ein RestBoolean oder RestInteger, die einfach halten ein int-oder boolean-Werte und die entsprechenden Anmerkungen.
Gibt es nicht einen einfacheren Weg, als das schreiben dieser container-Objekte?
- JAX-RS/Jersey unterstützt nicht die Serialisierung von primitiven Typen oder auch die wrapper-Typen wie Integer, Boolean usw.. AFAIK, ist der Ansatz, den Sie genommen haben, scheint nur so.
- Okay, danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie einen Blick auf Genson.Es hat mir geholfen, eine Menge mit einem ähnlichen problem.Mit Genson, die Sie nutzen könnten Generika wie int,boolean, Listen und so weiter...Hier ist ein kurzes Beispiel.
Dies wird produzieren ein gültiges JSON-Hexe abgerufen werden können, sehr einfach wie diese:
Werden Sie sehen, dass Genson helfen Sie decodieren des JSON-auf der client-Seite auch-und Ausgang die richtige Klasse für jeden.
Schreiben Sie eine Dienstleistung oder ein client? In der service-Seite der Dinge, Sie würde einfach schreiben MessageBodyWriter serialisieren, die einen Strom von Daten an ein Java-Objekt für Ihre Arten. In meinem use-cases, die Dienstleistungen, die ich Schreibe die Ausgabe in JSON oder XML, und XML ist der Fall, ich werfe gerade einen JAXB-annotation auf der Oberseite meiner Klassen und ich bin fertig.
Haben Sie schaute auf die Jersey-Benutzerhandbuch in Bezug auf diese?
3.6. Hinzufügen der Unterstützung für neue zusagen
Eigentlich Ihre beste Wette ist, zum schreiben eines benutzerdefinierten ContextResolver Anbieter wie den folgenden, verwendet Natürliche Aufbau von JSON.
Das einzige, was hier das Besondere auffällt, ist die YourSpecialBean.class in der Klasse[]. Dies definiert ein array von class-Typen, dass dieser Anbieter natürlich löst.
Erzählen Jersey generieren, die richtigen JSON-Dokumente (Natürliche json). Ich benutze dieselbe Klasse für den rest app und JAXBContext resolver, fanden es die saubere Kapselung.
Besserer Programmierer umsetzen konnte-Helfer zu Durchlaufen .die class-Dateien und die Liste der entsprechenden Klassen automatisch durch die Identifizierung von @Annotation tags. Ich weiß nicht, wie es zu tun, die Laufzeit in einem eigenen source-code.
Diese beiden links waren hilfreich, das Studium dieses extra java-jargon. Ich weiß nicht warum, es gibt keine Jersey-parameter, um alle nur Arbeit out of the box.
WEB-INF/web.xml (snippet):
com.myapp.rest.RESTApplication.java
Klassen MyBean1,MyBean2 sind Reine java-Objekte und MyBeansResource-Klasse ist mit @Path rest-Funktionen. Es ist nichts besonderes, Sie erwarten, dass standard jaxp @Anmerkungen hier und da. Nach dieser java-jargon JSON-Dokumente haben
Benutze ich folgende Umgebung
jersey-archive.zip hatte ältere asm-3.1.jar Datei, die wahrscheinlich funktioniert, aber chapter_deps.html links auf eine neuere Datei. Siehe link-Liste oben.
Bearbeiten
Fand ich eine ausgezeichnete(schnell, leicht, nur 15KB) Anmerkung discovery-tool. Finden Sie in diesem Beitrag darüber, wie ich die AutoErmittlung-Typen zur Laufzeit und nicht mehr Bearbeiten müssen RESTApplication jedes mal neue java(jaxb) bean Hinzugefügt.
https://github.com/rmuller/infomas-asl/issues/7
Ich hatte das gleiche problem heute und nicht aufgeben, bis ich eine wirklich gute, passende Lösung. Ich kann nicht aktualisieren, jersey library von 1.1.5 es ist ein Legacy-System. Mein Rest-Service liefert eine Liste, und Sie sollten Folgen Sie diesen Regeln zu.
Starten, von leicht bis unmöglich.
3) nichts ist heute normaler JSON-Mapping
2) Registrieren JAXBContextResolver wie die folgenden
1) Die folgende Vorgehensweise funktioniert nur für Sammlungen$EmptyList Klasse. Vielleicht finden Sie einen Weg, um es generell für alle Kollektionen, Sie sind leer. Kann code deal mit EmptyList so.
Ich habe gerade entdeckt, dass eine Rückkehr zu einem primitiven Typ mit Jersey ist problematisch. Ich habe entschieden, die Rückgabe-Zeichenkette statt. Dies ist vielleicht nicht sauber, aber ich glaube nicht, es ist zu schmutzig. Der Java-client, der wurde vom gleichen Autor geschrieben der server die meiste Zeit wickeln kann so ein string-Wert zurückgeben und konvertieren es zurück zu int. Clients in anderen Sprachen geschrieben sind, müssen sich bewusst sein, Rückgabetypen keiner Weise.
Definieren RestInteger, RestBoolean kann eine andere option sein, aber es ist eher umständlich, und ich sehe auch kaum Vorteile, die es attraktiv zu sein.
Oder vielleicht bin ich etwas fehlt hier wichtig?