2013-07-07 5 views
6

Ich benutze Jersey, um JSON (mit POJO-Mapping durch Jackson) und Jetty (ausgehend von der Hauptmethode) zu erzeugen.
Es funktioniert für Jersey 1.x perfekt .:Die POJO-basierte JSON-Bindungsunterstützung für Jackson in Jersey 2.0 kann nicht aktiviert werden.

ServletHolder sh = new ServletHolder(ServletContainer.class); 
sh.setInitParameter("com.sun.jersey.config.property.resourceConfigClass", 
         "com.sun.jersey.api.core.PackagesResourceConfig"); 
sh.setInitParameter("com.sun.jersey.config.property.packages", "service"); 
sh.setInitParameter("com.sun.jersey.api.json.POJOMappingFeature", "true"); 
... 
context.addServlet(sh, "/rest/*"); 
Server server = new Server(8080); 
server.setHandler(context); 
server.start(); 

Jetzt wanderte ich mein Projekt nach Jersey 2.0 und gescheiterte POJO based JSON Bindung in ihm zu ermöglichen, habe ich folgendes: Offensichtlich org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class business.entity.ExampleEntity, genericType=class business.entity.ExampleEntity.

, com.sun.jersey.api.json.POJOMappingFeature nicht mehr gültig wie Jersey geht an org.glassfish

die documentation folgendes sagen:

Um Jackson als JSON (JAXB/POJO) Provider zu verwenden, müssen Sie JacksonFeature und einen ContextResolver für ObjectMapper (falls erforderlich) in Ihrem Konfigurierbaren (Client/Server) registrieren.

Aber ich kann nicht herausfinden, wie es in meinem Fall richtig geht.

habe ich ein wenig project für diese Frage:

Zweig master - arbeitete Beispiel für Jersey 1.17.1;

Zweig jersey-2.0-migration - nicht funktioniert Versuch, auf Jersey 2.0 zu migrieren - Test fehlgeschlagen;

Zweig jersey-2.0-migrate-client-only - nicht arbeiten Versuch zu verwenden, Jersey-Client 2.0 mit Arbeits Server Jersey 1.17.1 - Test fehlgeschlagen.

Frage ist: Wie 2.0 POJO basiert JSON Bindung in Jersey ermöglichen

Antwort

15

Die Dokumentation etwas veraltet ist. Das neueste Jackson-Build bietet einen automatisch erkennbaren Anbieter. Fügen Sie die folgenden Gläser des Klassenpfad:

1) Jackson-Annotationen-2.2.2.jar

2) Jackson-core-2.2.2.jar

3) Jackson-databind-2.2 .2.jar

4) Jackson-jaxrs-base-2.2.1.jar

5) Jackson-jaxrs-json-Provider-2.2.1.jar

6) Jackson-Modul- jaxb-annotations-2.2.2.jar

Stellen Sie sicher, dass Sie "com.fasterxml.jackson.jaxrs.json" zur Servletkonfigurationseigenschaft "jersey.config.server.provider.packages" hinzufügen, damit der Jackson Json-Provider automatisch erkannt werden kann.

+0

Es funktionierte für mich! Vielen Dank! Ich habe meinem kleinen [Projekt] (https://github.com/halfstrik/Jersey20Migration/tree/jersey-2.0-migration-success) auf GitHub 'jersey-2.0-migrate-server-success' und' jersey zwei neue Zweige hinzugefügt -2.0-Migrationserfolg' Sie beschreiben die Lösung und es hat den Test bestanden! – Strikki

+0

Ich arbeite auch mit 'jersey-media-json-jackson 2.0' (siehe Update bei' jersey-2.0-migration'), aber ohne 'jersey-client 2.0' werden Warnungen wie erwähnt in [comments] (http: //stackoverflow.com/a/16993761/846325) – Strikki

+0

Stunden der Qual sind vorbei. Moxy versagte leise und ich musste zurück zu Jackson und ich war bereit meinen Kopf durch ein Fenster zu stecken. Danke für diese Antwort. – JSager

3

Ich mochte @ jontro's Kommentar/Antwort ... also werde ich es als Antwort anstatt als Kommentar veröffentlichen, damit die Leute es nicht verpassen (hoffentlich ist das in Ordnung).

Werfen Sie einen Blick auf https://github.com/FasterXML/jackson-jaxrs-providers, wo es neue jackson Jaxrs-Anbieter gibt (aus dem Jackson-Projekt und nicht aus dem Jersey-Projekt).

Beachten Sie, dass dies Jackson2 Abhängigkeiten (Jackson-Core-2.2.3.jar usw.) eher als Jackson1 Abhängigkeiten bringt, die Jersey-Media-Json-Jackson bringt (jackson-core-asl-1.9.13.jar etc).

Für meine Maven-Projekt mit Trikot 2.5 dies schlägt sich in:

die Abhängigkeit entfernen:

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-json-jackson</artifactId> 
    <version>2.5.1</version> 
</dependency> 

die Abhängigkeit hinzufügen:

<dependency> 
    <groupId>com.fasterxml.jackson.jaxrs</groupId> 
    <artifactId>jackson-jaxrs-json-provider</artifactId> 
    <version>2.2.3</version> 
</dependency> 

Dank @ user2562639 und @jontro.

Verwandte Themen