2015-03-25 8 views
8

Ho cercato di sapere se JacksonFeature.class è ancora necessario per Jersey 2.17. Non riesco a vedere alcuna differenza tra le uscite tra i codici che JacksonFeature.class è registrato o meno.Abbiamo ancora bisogno di JacksonFeature.class per i progetti di Jersey 2.17?

Quindi, ho biforcuto un codice da codingpedia codingpedia, rimosso JacksonFeature.class, aggiornato a Spring 4.1.2 e jersey 2.17, aggiornato i codici e il test ancora passato.

Così ho creato un servizio Web molto semplice per testarlo nuovamente github link, avendo in mente di rimuovere tutte le parti mobili e ancora funzionante. Quindi dobbiamo ancora registrare JacksonFeature?

risposta

8

Sì, non so perché quel tutorial stiano usando il Jersey 2.9, ma per l'arte jersey-media-json-jackson, stanno usando 2.4.1. In generale dovresti mantenere le stesse versioni del manufatto (artefatto correlato). Nell'effettivo Github Project, l'autore lo ha modificato per utilizzare lo ${jersey.version} (che è 2.14) del progetto, il che ha più senso.

Ma per rispondere alla vostra preoccupazione principale, a partire dalla versione 2.9 il modulo jersey-media-json-jackson, prende parte allo AutoDiscoverable classpath scanning, che coinvolge Java's Service Provider mechanism. Puoi vedere questo cambiamento passando alla versione 2.8 e alla versione 2.9 (al rialzo) di questo modulo. Vedrete nello META-INF/services, il file org.glassfish.jersey.internal.spi.Autodiscoverable (che elenca l'implementazione JacksonAutoDiscoverable), nella versione 2.9 (e successive). Con questo, la funzione non ha bisogno di essere configurata esplicitamente, a meno che la funzione auto-rilevabile non sia disabilitata (cosa che è possibile fare esplicitamente).


E solo per completezza, quando si ha Moxy nel classpath, e non si registra in modo esplicito la funzione di Jackson, Moxy saranno utilizzati, come Moxy è il provider predefinito. Anche se potresti non avere una dipendenza esplicita da MOXy, in situazioni come l'uso del server Glassfish, ha l'artefatto MOXy, nel qual caso possiamo registrare esplicitamente la funzione Jackson, che disabilita automaticamente MOXy, o possiamo disabilitare esplicitamente MOXy con la proprietà ServerProperties.MOXY_JSON_FEATURE_DISABLE impostata su true

+1

ah ... ora tutto ha senso. Grazie! Quindi la registrazione della feature class nell'applicazione sarebbe parte dell'ottimizzazione del progetto. Ma ovviamente, la scansione del percorso di classe autodiscoverable dovrebbe essere disabilitata per notare la differenza. Grazie peeskillet! –

+0

Grazie ancora! Quella ultima modifica che hai aggiunto è preziosa. Non avrei mai immaginato come MOXy sia coinvolto in un progetto basato su Jersey. Roba buona! –

Problemi correlati