Wir haben eine JAX-RS-Anwendung, die auf Apache TomEE läuft. Wir passen den Standard-Jettison-Anbieter leicht an, um die JSON-Konventionen, die von JavaScript-Frontend verwendet werden, besser einzuhalten. TomEE ermöglicht es über seine resources.xml zu tun, Datei:Anpassen von JSON marhsalling mit 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>
Jetzt sind wir auf Glassfish v4.1 migrieren, und wir feststellen, dass JSON Ausgabe unterscheidet sich von dem, was wir in TomEE hatte - also völlig Bruch Frontend. Ich suche nach einem ähnlichen Mechanismus, um JSON Marshaller in GlassFish anzupassen. In der Tat, ich bin schon ein wenig stuck mit Jersey, MOXy, Jackson, Jettison. Woher wissen wir, welcher JSON-Provider tatsächlich verwendet wird? Wie wählen wir einen aus? Wie passen wir das Verhalten an?
Die Anwendung ist reines JAX-RS und verwendet keinen JSON-Prozessor direkt, sondern beruht auf dem Marshalling JAXB-annotierter Klassen. Die Einführung von Nicht-JavaEE-Abhängigkeiten ist äußerst unerwünscht, da die Anwendung über Container (TomEE, GlassFish, einige Tage WildFly) portierbar sein soll. Config-Datei-Methode, ähnlich wie TomEE, ist vorzuziehen; Programmatic Way ist auch akzeptabel - aber nur, wenn Portabilität beibehalten wird.
Herausfinden über 'jersey.config.server.disableMoxyJson' nahm mich wie ein Tag. Endlich habe ich meinen Gson-Provider am arbeiten. Vielen Dank! –