Dies muss zuvor beantwortet worden sein, aber meine Google-Befugnisse sind heute deaktiviert und ich habe damit ein wenig gekämpft. Wir migrieren von einer alten PHP-Basis zu einem Jersey-basierten JVM-Stack, der letztendlich eine JSON-basierte RESTful-API bereitstellt, die von vielen Anwendungen genutzt werden kann. Die Dinge waren bisher sehr gut und wir lieben die einfache Konvertierung von POJO in JSON. Wir haben jedoch Probleme mit domainübergreifenden JSON-Anfragen. Wir haben im Wesentlichen alle unsere Antworten, die JSON (mit @Products ("application/json") und dem com.sun.jersey.api.json.POJOMappingFeature auf true) zurückgeben, aber für die JSONP-Unterstützung müssen wir unsere Methoden ändern, um ein zurückzuliefern Instanz von JSONWithPadding. Dies erfordert natürlich auch, dass wir jeder Methode einen @QueryParam ("Callback") - Parameter hinzufügen, der unsere Bemühungen im Wesentlichen vervielfältigt, sodass zwei Methoden erforderlich sind, um mit denselben Daten zu antworten, je nachdem, ob ein Callback-Parameter vorhanden ist oder nicht in der Anfrage. Das wollen wir natürlich nicht.Javas Jersey, RESTful-API und JSONP
Also haben wir im Wesentlichen ein paar verschiedene Möglichkeiten ausprobiert. Ich bin mir sicher, dass dieses Problem gelöst wurde. Ich habe von einigen Stellen gelesen, dass ich einen Anforderungsfilter schreiben könnte oder ich den JSON Provider erweitern könnte. Meine ideale Lösung ist, keinen Einfluss auf unsere Daten oder Logiklayer zu haben und stattdessen Code zu haben, der sagt: "Wenn es einen Rückrufparameter gibt, umgebe den JSON mit dem Callback, sonst gib einfach den JSON zurück". Eine Lösung wurde hier gefunden: http://jersey.576304.n2.nabble.com/JsonP-without-using-JSONWithPadding-td7015082.html
Diese Lösung erweitert jedoch das Jackson JSON-Objekt, nicht der Standard-JSON-Anbieter.
Was sind die besten Praktiken? Wenn ich auf der richtigen Spur bin, was ist die Klasse für den Standard-JSON-Filter, den ich erweitern kann? Ist eine zusätzliche Konfiguration erforderlich? Bin ich völlig verrückt?
Das Problem ist, dass jQuery standardmäßig einen Akzeptiert * Header sendet, also den angeforderten MIME-Typ und sendet application/json als Anfrage, auch wenn der angegebene Typ jsonp ist. Ich tippe ein, was ich schließlich in einer anderen Antwort arbeiten konnte, aber kurz gesagt habe ich einen Filter und Wrapper außerhalb von Jersey geschrieben, um einfach nach dem Vorhandensein des Callback-Parameters für eine JSON-Anfrage zu suchen und, falls vorhanden, den Rückruf hinzuzufügen die Antwortausgabe. Danke für die Antwort! –