Abbiamo un'applicazione JAX-RS che gira su Apache TomEE. Personalizziamo leggermente il provider Jettison predefinito per aderire meglio alle convenzioni JSON utilizzate dal front-end JavaScript. TomEE permette di farlo attraverso il suo file resources.xml:Personalizzazione di JSON marallall con GlassFish v4
<resources>
<Service id="jettison" class-name="org.apache.cxf.jaxrs.provider.json.JSONProvider">
serializeAsArray = true
dropRootElement = false
arrayKeys = members,roles
supportUnwrapped = true
writeXsiType = false
</Service>
</resources>
Ora stiamo migrando a GlassFish v4.1, e notiamo che l'uscita JSON è diverso da quello che avevamo in TomEE - così frontend completamente rottura. Sto cercando un meccanismo simile per personalizzare il marshaller JSON in GlassFish. In effetti, sono già un po 'stuck con Jersey, MOXy, Jackson, Jettison. Come facciamo a sapere quale fornitore JSON è effettivamente utilizzato? Come ne selezioniamo uno? Come personalizziamo il comportamento?
L'applicazione è pura JAX-RS e non utilizza alcun processore JSON direttamente, affidandosi invece al marshalling delle classi con annotazione JAXB. L'introduzione di qualsiasi dipendenza non JavaEE è altamente indesiderabile, dal momento che l'applicazione è concepita per essere portabile su container (TomEE, GlassFish, alcuni giorni WildFly). Il metodo del file di configurazione, simile a TomEE, è preferibile; Anche la modalità programmatica è accettabile, ma solo se viene mantenuta la portabilità.
Scoprire 'jersey.config.server.disableMoxyJson' mi ha portato come un giorno. Finalmente ho il mio provider Gson funzionante. Grazie! –