Ici, nous avons une webApp de base à l'aide de JSP qui doit fournir quelques URL de service de repos basées sur JSON. p>
Ces URL résident tous sous Les exemples que je vois pour les paramètres Up JSON Vues basées sur JSON Toutes utilisent Je veux juste que mon seul Y a-t-il un moyen plus propre plus simple et plus simple de simplement diriger le contrôleur pour le faire? P> / services code> et être généré par un myrestservicescontroller code>. p>
contesteNegotiateViewSolver code>. Mais il semble que ce résolveur soit exceptionnel car ce résolveur semble conçu pour des situations où la même URL pourrait produire une sortie différente. P>
resservicescontroller code> Pour toujours produire MappingJacksonjson (s) code>. p>
3 Réponses :
Y a-t-il un moyen plus propre plus simple et plus simple de simplement diriger le contrôleur pour le faire? P>
oui il y a. Vous pouvez jeter un coup d'œil à cet exemple que j'ai publié dans Forums de printemps . En bref, je préfère le faire est à travers ce qui suit. P>
ApplicationContext: P>
@RequestMapping("/service") public ModelAndView getResultAsJson() { Object jsonObj = // the java object which we want to convert to json return new ModelAndView("jsonView", "result", jsonObj); }
Oh yeh, cela a le sens total et est très simple. Exactement ce que j'espérais, et une réponse super rapide. Un million de merci. Je dois avoir lu sur le résolveur du beanName 5 fois et il n'a jamais cliqué pour l'utiliser, je pense que ma tête était toujours bloquée dans des modèles-terre.
Si tout ce que vous avez à faire est de produire JSON, la couche de vue elle-même est redondante. Vous pouvez Utilisez le @ Responsebody Code> Annotation Pour déterminer le printemps à sérialiser votre modèle directement, à l'aide de Jackson. Il nécessite moins de configuration que l'approche code> MappingJacksonjsonview code>, et le code est moins encombré. P>
+1 Cela fonctionne pour moi. Savez-vous comment je pourrais changer le type de contenu?
Il y a un inconvénient à @Responsebody, après le retour du contrôleur, la vue est immédiatement rendue, ce qui ferme les en-têtes HTTPResponse afin que les en-têtes ne puissent être ajoutés (par exemple, à travers une méthode posthandle d'un intercepteur). L'utilisation d'un contenuGotiedViewResolver n'a pas ce problème.
Tant que vous utilisez MVC: Annotation-Driven et Jackson est sur le path de classe, alors tout ce que vous devriez avoir à faire est d'utiliser @Responsebody sur vos méthodes et que le type de retour sera converti en JSON par standard conversion de message HTTP une fonctionnalité> p>
Découvrez également cette vidéo vers 37h00: Maîtrise du printemps MVC a>. p>
Merci pour le lien vidéo, regardez-le.
Vous souhaitez spécifiquement
MappingJacksonJsonview code> ou voulez-vous juste que JSON soit sortie?La sortie JSON est l'objectif ultime, en utilisant les composants de ressort standard, semble être une meilleure pratique. Johan l'a frappé sur la tête.