2013-07-07 21 views
6

Używam produktu Jersey do produkcji JSON (z odwzorowaniem POJO przez Jacksona) i Jetty (rozpocznij od głównej metody).
Działa on idealny dla Jersey 1.x .:Nie można włączyć obsługi powiązania JSON opartej na systemie POJO dla systemu Jackson w Jersey 2.0

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(); 

Teraz migracji mojego projektu do Jersey 2.0 i udało się włączyć POJO oparty wiążące JSON w nim, pojawia się następujący: org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class business.entity.ExampleEntity, genericType=class business.entity.ExampleEntity.

Oczywiście , com.sun.jersey.api.json.POJOMappingFeature nieważne jak Jersey idzie org.glassfish

documentation powiedzieć, co następuje:

Aby użyć Jacksona jako dostawcy JSON (JAXB/POJO), musisz zarejestrować JacksonFeature i ContextResolver dla ObjectMapper (jeśli to konieczne) w konfiguracji (klient/serwer).

Ale nie mogę wymyślić, jak zrobić to poprawnie w moim przypadku.

stworzyłem trochę project na to pytanie:

oddziału master - pracował na przykład Jersey 1.17.1;

oddział jersey-2.0-migration - nie działa próba migracji do Jersey 2.0 - test nieudany;

oddział jersey-2.0-migrate-client-only - non próba pracy do korzystania z Jersey klienta 2.0 działa serwer Jersey 1.17.1 - test zakończył się niepowodzeniem.

Pytanie brzmi: w jaki sposób, aby umożliwić wiązanie w Jersey 2,0

Odpowiedz

15

Dokumentacja jest nieco przestarzały JSON oparciu POJO. Najnowsza kompilacja Jacksona zapewnia dostawcę usług auto-wykrywalnych. Dodać następujące słoików na ścieżce klasy:

1) Jackson adnotacje-2.2.2.jar

2) Jackson rdzenia 2.2.2.jar

3) Jackson DataBind-2,2 .2.jar

4) Jackson jaxrs baza-2.2.1.jar

5) Jackson jaxrs-JSON dostawca-2.2.1.jar

6) Jackson module- jaxb-adnotations-2.2.2.jar

Dodaj "com.fasterxml.jackson.jaxrs.json" do właściwości konfiguracyjnej serwletu "jersey.config.server.provider.packages", aby dostawca jsonów Jackson mógł zostać automatycznie wykryty.

+0

To zadziałało dla mnie! Wielkie dzięki! Dodałem dwie nowe gałęzie do mojego małego [projektu] (https://github.com/halfstrik/Jersey20Migration/tree/jersey-2.0-migration-success) na GitHub 'jersey-2.0-migrate-server-success' i' jersey -2.0-migracja-sukces "opisują rozwiązanie i przeszło test! – Strikki

+0

Pracuję także z 'jersey-media-json-jackson 2.0' (patrz aktualizacja w' jersey-2.0-migration'), ale bez 'jersey-client 2.0' dostaje ostrzeżenia takie jak wspomniane w [comments] (http: //stackoverflow.com/a/16993761/846325) – Strikki

+0

Godziny cierpienia minęły. Moxy zawodził w milczeniu i musiałem wrócić do Jacksona, a ja byłam gotowa, by przesunąć głowę przez okno. Dziękuję za tę odpowiedź. – JSager

3

Ja osobiście lubiłem komentarz/odpowiedź @ jontro ... więc zamierzam ponownie opublikować to jako odpowiedź zamiast komentarza, aby ludzie tego nie przegapili (mam nadzieję, że wszystko jest w porządku).

Spójrz na https://github.com/FasterXML/jackson-jaxrs-providers, gdzie są nowi dostawcy jajek jackson (z projektu jackson, a nie z projektu koszulki).

Należy zauważyć, że powoduje to zależności Jackson2 (jackson-core-2.2.3.jar itp.), A nie zależności od Jackson1, które przynosi jersey-media-json-jackson (jackson-core-asl-1.9.13.jar itp.).

dla mojego projektu maven przy użyciu jersey 2.5 przekłada się to na:

Usuń zależność:

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

dodać zależność:

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

Dzięki @ user2562639 i @jontro.

Powiązane problemy