2015-03-25 4 views
8

Ich habe versucht zu wissen, ob JacksonFeature.class noch für Jersey 2.17 benötigt wird. Ich kann keinen Unterschied zwischen den Ausgaben zwischen den Codes sehen, für die JacksonFeature.class registriert ist oder nicht.Brauchen wir noch JacksonFeature.class für Jersey 2.17 Projekte?

Dann verzweigte ich einen Code aus codingpedia codingpedia, entfernt JacksonFeature.class, aktualisiert auf Spring 4.1.2 und Jersey 2.17, aktualisiert die Codes und der Test noch bestanden.

Also habe ich einen sehr einfachen Web-Service erstellt, um dies erneut zu testen github link, im Sinn, alle beweglichen Teile zu entfernen und funktionierte noch. Müssen wir JacksonFeature noch registrieren?

Antwort

8

Ja, ich weiß nicht, warum dieses Tutorial sie Jersey 2,9 verwenden, aber für die jersey-media-json-jackson Artefakt verwenden sie 2.4.1. Im Allgemeinen sollten Sie die Versionen von Jersey (verwandtes Artefakt) beibehalten. In der tatsächlichen Github Project hat der Autor dies geändert, um die ${jersey.version} des Projekts zu verwenden (die 2,14 ist), die mehr Sinn macht.

Aber um Ihre Hauptanliegen zu beantworten, ab Version 2.9 das Modul jersey-media-json-jackson, nimmt an der AutoDiscoverable classpath scanning teil, die Java's Service Provider mechanism beinhaltet. Sie können diese Änderung sehen, indem Sie auf die Version 2.8 und 2.9 (aufwärts) dieses Moduls hin- und herschalten. Sie sehen in der META-INF/services die Datei org.glassfish.jersey.internal.spi.Autodiscoverable (die die JacksonAutoDiscoverable Implementierung auflisten), in Version 2.9 (und höher). Damit muss das Feature nicht explizit konfiguriert werden, es sei denn, die Funktion zur automatischen Erkennung ist deaktiviert (was explizit möglich ist).


Und nur der Vollständigkeit halber, wenn Sie moxy auf dem Classpath haben, und Sie sich nicht registrieren explizit die Jackson-Funktion, wird moxy verwendet werden, wie moxy ist der Standardanbieter. Auch wenn Sie keine explizite Abhängigkeit von MOXy haben, können Sie in Situationen wie dem Glassfish-Server das MOXy-Artefakt verwenden. In diesem Fall können wir entweder explizit das Jackson-Feature registrieren, das MOXy automatisch deaktiviert, oder explizit deaktivieren MOXy mit der Eigenschaft ServerProperties.MOXY_JSON_FEATURE_DISABLE auf True gesetzt

+1

ah ... jetzt macht alles Sinn. Vielen Dank! Die Registrierung der Feature-Class in der Anwendung wäre daher Teil der Optimierung des Projekts. Natürlich sollte die automatische Erkennung des Klassenpfads deaktiviert werden, um den Unterschied zu erkennen. Danke Peeskillet! –

+0

Danke nochmal! Die letzte Änderung, die du hinzugefügt hast, ist wertvoll. Ich hätte nie gedacht, wie sehr es in ein Jersey-basiertes Projekt involviert ist. Gutes Zeug! –