2014-04-20 3 views
0

J'ai une application Web construite sur Spring MVC, qui fonctionne déjà. Je prévois de donner aux utilisateurs mobiles une application pour communiquer avec le serveur, de sorte qu'ils trouveront plus facile d'interagir avec lui. J'ai le modèle, les vues et les contrôleurs fonctionnant bien, mais tout a été conçu du point de vue du Web. Donc, je suis en train de construire quelques nouveaux contrôleurs pour l'application mobile, et voici la question: puisque l'ultime responsabilité de la vue va être l'application mobile en question, où dois-je déléguer tout à la application, dans le contrôleur (préparer un JSON pour chaque réponse)? Ou devrais-je avoir un JSP avec un taglib JSON activé, de sorte que le contrôleur donne les pièces à la JSP, et puis je construis la réponse JSON dans la JSP?Application mobile + Spring MVC - JSP?

Je ne suis pas clair sur l'architecture MVC sur ce scénario.

Merci d'avance.

Répondre

1

Quand tout ce que vous faites est la création d'une API REST qui mobile (ou d'autres clients) vont utiliser, les vues ne sont pas en jeu. C'est la responsabilité du contrôleur de préparer la réponse appropriée pour le client. Heureusement, comme le retour de JSON est un scénario courant, Spring MVC gère de façon transparente la sérialisation en JSON (à l'aide de la bibliothèque Jackson) sans que vous ayez à le faire.

Comme JB Nizet a montré, vous pouvez utiliser l'annotation @ResponseBody pour dire Spring MVC que la réponse doit être retourné comme est (avec numéro de série à JSON en raison de la produces = MediaType.APPLICATION_JSON_VALUE) ou si vous utilisez Spring 4, vous pouvez fossé complètement le @ResponseBody annotation et annoter votre contrôleur avec @RestController (ce qui rend ressort se comporter comme si @ResponeBody a été ajouté à toute application de la méthode) au lieu de @Controller.

1

Les méthodes de contrôleur devrait renvoyer obejcts (ou des collections d'objets), qui sera sérialisé JSON automatiquement grâce à l'annotation @ResponseBody:

@RequestMapping(value = "/api/users", 
       method = RequestMethod.GET, 
       produces = MediaType.APPLICATION_JSON_VALUE) 
@ResponseBody 
public List<User> listUsers() { 
    ... 
} 
+0

Merci pour votre réponse. J'ai utilisé '@ ResponseBody' pour gérer les appels AJAX via l'application web, donc OK, je pense que cela le ferait. Je marque l'autre réponse comme "la réponse" juste parce qu'elle en dit un peu plus sur mes doutes sur MVC et le développement d'applications mobiles. – Azurlake

Questions connexes