titre dit de mon problème. J'ai besoin d'envelopper DTO dans une méthode javascript. Actuellement, je reviens sur demande JSON. Mais problème avec l'utilisation de cela dans Ajax parce que j'envoie d'arriver à un autre domaine. et bien sûr la police de la sécurité. P>
J'ai une idée de créer une offre d'addition. Avez-vous un exemple, des liens ou une suggestion comment peut-on faire cela? P>
5 Réponses :
Il n'y a pas de support explicite pour JSONP dans Reseastant, mais un moyen facile d'activer JSONP dans votre application est d'écrire un filtre de servlet. P>
Voici quelques liens qui peuvent vous aider à écrire un filtre: p>
JSONP-Java: filtre latéral du serveur enveloppe toute réponse dans un rappel JSONP < / a> p> li>
Mise en œuvre d'un filtre de servlet pour Rappel JSONP avec délégation de ressortFilterProxy (si vous utilisez le printemps) P> LI>
ul>
Quand j'avais eu cette exigence, j'ai fini par écrire le mien car aucun des exemples que j'ai trouvés ne semblait tout de même. Voici mes conseils pour écrire votre propre filtre: P>
Enveloppez uniquement la réponse si un paramètre de rappel est spécifié (évidemment) p> li>
Enveloppez uniquement la réponse si le type de contenu de réponse est Utilisez httpServletResponsewrapper afin que vous puissiez invoquer la chaîne avant ( Lorsque vous décidez d'envelopper la réponse en tant que JSONP, assurez-vous de modifier le type de contenu de réponse en Si vous n'avez pas beaucoup fait avec Java EE Filtres auparavant, vous voudrez peut-être lire la section pertinente du didacticiel Java EE en premier: Demandes et réponses de filtrage . P>
Application / JSON CODE> (ou si vous souhaitez prendre en charge une sélection plus large de variantes, enveloppez uniquement si le type de contenu de réponse est
Application / JSON code> ou
Application / * + JSON CODE>) P> LI>
chaîne.dofilter code>) sans écrire de données à la réponse réelle. Une fois la chaîne avant terminée, vous pouvez ensuite vérifier le type de contenu, assurez-vous de vouloir envelopper la réponse en tant que JSONP, puis écrivez les données capturées dans la réponse
Texte / JavaScript CODE> P> P> L>
ul>
Puis-je voir votre mise en œuvre? Le mien continue de retourner XML dans le rappel.
Je crains que tu ne puisses pas; Je ne peux pas libérer la source :( Quel fournisseur restant utilisez-vous pour produire votre JSON? J'utilise le fournisseur de Reseasey-Jackson. Assurez-vous que votre méthode de ressource est marquée comme @Produces ("Application / JSON") puis dans votre filtre , Vérifiez ce qui a été écrit dans le wrapper de réponse. Si la chaîne avant écrit XML dans le wrapper de réponse, cela n'a rien à voir avec votre filtre JSONP. Essayez d'examiner les réponses à l'aide de Firebug ou de chrome (avec et sans paramètre de rappel). Si vous postez votre code quelque part, je peux jeter un coup d'oeil.
Bonjour Joelittlejohn, pourriez-vous m'aider s'il vous plaît. Je ne peux pas définir de type de contenu sur text / javascript. réponse.iscommouver () == True et en conséquence ne peut pas changer de type. Toute solution?
@Tioma, je pense que vous passez à la réponse réelle à la chaîne avant au lieu d'utiliser une enveloppe de réponse. Si vous avez la réponse de Sergei et que vous prenez une attention particulière aux pièces impliquant le byteAreRayOutPutStream code> et
httpServletResponsewrapper code> alors cela devrait alors aider.
Je fais des projets de contournement pour ce problème. Essayez-le. Cette solution prend des données via HTTP Obtenir des paramètres et traduisez la demande de poste virtuelle.
jQuery: strong> p> Déclaration dans l'interface de service < / strong> p> Classe de filtre: strong> p> web.xml < / strong> p>
Une amélioration pour soutenir JSONP doit être publiée dans ReseaseAsy 2.3.6 final / 3.0-bêta-4 ( https://issues.jboss.org/browse/ressey-342 ). J'ai été capable de "backport" ma projet qui utilise reseasey 2.3.5 en copiant simplement leur code de Github . p>
Reseasey reprend automatiquement le nouveau fournisseur basé sur l'annotation. Il fonctionne automatiquement en enveloppant vos résultats dans un rappel JS une fois qu'il considère un paramètre de requête nommé "rappel" dans l'URL. Ceci est compatible avec ce que JQuery envoie au serveur pour les demandes JSONP. P>
Pour suivre à partir de @talawahdotnet, j'utilise reseasey 3.0.9.finale et il est prudent pour JSONP, une fois activé, toute demande avec un paramètre de requête "rappellera" sera enveloppée comme JSONP. J'utilise JBoss pour que les documents complètes sont ici pour d'autres conteneurs. Voici les étapes que je devais faire:
dans votre web.xml Ajouter: P>
Assurez-vous d'avoir un web-Inf / jboss-déploiement-structure.xml avec: p>
Assurez-vous de disposer d'une dépendance restricée-jackson-fournisseur dans votre pom.xml, quelque chose comme: p>
Je mettez dans les paramètres de rappel et je l'obtiens en réponse, mais le "type" indique toujours l'application / JSON. Dois-je annoter la méthode @get dans mon code pour faire référence au fournisseur d'une manière ou d'une autre?
Pour être honnête, je n'ai peut-être pas vérifié que le type de contenu était correct à l'époque, mais vous pouvez essayer de la définir manuellement avec @Produces ou de retourner un objet de réponse avec le jeu de types
Vous pouvez utiliser l'application / JSON, j'ai essayé et cela a fonctionné bien ... Juste une mise à jour mineure en version 3.0.12: l'intercepteur correct est org.jboss.resseasy.plugins.providers.jackson. Jackson2jsonpin Terceptor CODE> et, d'ailleurs, sur la version 3.0.10, il y a un bogue, ce qui provoque une erreur JavaScript lorsque le navigateur reçoit la réponse JSON: Stackoverflow.com/a/29484700/3335350
resease revendications pour supporter JSONP < / a> hors de la boîte en version 3.x: p>
Si vous utilisez Jackson, Reseasey a JSONP que vous pouvez allumer
Ajouter le fournisseur
org.jboss.resseasy.plugins.providers.jackson.jacksonjsonpinterceptor
(Jackson2jsonpinterceptor si vous utilisez le fournisseur Jackson2) pour
vos déploiements. Si le type de média de la réponse est JSON et un
Le paramètre de requête de rappel est donné, la réponse sera un javascript
Snippet avec une méthode appel de la méthode définie par le rappel
paramètre. Par exemple: p>
Obtenir / Ressources / Stuff? Callback = Processstuffresponse produira ceci
Réponse: P>
ProcessstuffonseSresponse () Ceci prend en charge la valeur par défaut
Comportement de JQuery. P>
Vous pouvez modifier le nom du paramètre de rappel en définissant le
CallbackQueryParameter Propriété. P>
blockQuote>
Cependant, il semble qu'il soit cassé à cause de reseasey-1168: jackson2jsonpinterceptor ne rend pas support de fermeture p>
Alors
et cette cause "SyntaxExError non capturé: identifiant inattendu" Erreur p>
J'ai soumis un Demande de pull avec une solution et j'espère que cela devrait entrer dans prochaine version 3.0.12 P>
Je sais que cette question est assez ancienne, mais elle est indiquée sur la première page de Google lorsque vous recherchez des problèmes JSONP resease, j'ai donc décidé de le mettre à jour p>
foo ({"foo": "bar"} code>
est rendu au lieu de
foo ({"foo": "bar"}) code> p>