Étant donné que les méthodes de contrôleur basées sur REST ne renvoient que des objets (pas des vues) au client en fonction de la demande, comment puis-je afficher la vue à mon utilisateur? Ou peut-être mieux se demander quel est un bon moyen de combiner l'application Web spring-mvc avec REST, afin que mon utilisateur obtienne toujours la réponse, pas seulement (par exemple) au format JSON, mais aussi avec la vue?

Pour autant que je sache, le contrôleur basé sur REST conviendrait parfaitement à l'application mobile (par exemple Twitter), où les vues sont gérées à l'intérieur de l'application et la seule chose dont le serveur doit se soucier est de transmettre le bon objet à la bonne requête. Mais qu'en est-il de l'application Web?

Je peux me tromper sur plusieurs points (corrigez-moi si je le suis), car j'essaie de comprendre REST et j'apprends encore.

0
Druudik 15 nov. 2017 à 15:09

4 réponses

Meilleure réponse

Pour simplifier les choses, vous avez essentiellement deux options: 1) Créer une application Spring MVC. 2) Créez une application backend REST.

Dans le cas de la première option - dans votre application, vous aurez à la fois le backend et le frontend (partie MVC).

Dans le cas de la deuxième option, vous ne créez que l'application backend et l'exposez via l'API REST. Dans la plupart des cas, vous devrez créer une autre application - le client REST pour votre application. Il s'agit d'une application plus flexible car elle vous donne la possibilité d'accéder à votre application backend à partir de divers clients - par exemple, vous pouvez avoir des applications Android, IOS, vous pouvez avoir une application Web implémentée en utilisant Angular, etc.

Veuillez noter que les minces ne sont pas si simples, vous pouvez dans une seule application avoir à la fois le backend REST et le client REST, etc. Ceci est juste très très simplifié afin que vous ayez une image générale. J'espère que cela clarifie un peu les choses.

1
nick79 15 nov. 2017 à 14:54

Si vous annotez une méthode avec @ResponseBody, Spring utilisera un mappeur json pour générer la réponse. Au lieu d'annoter chaque méthode avec @ResponseBody, vous pouvez annoter votre classe avec @RestController.

Si vous souhaitez renvoyer une vue, vous devez annoter la classe avec @Controller au lieu de @RestController et configurer un visionneur. Bij default spring utilisera thymeleaf comme un résolveur de vue si vous avez spring-web comme dépendance sur le classpath. Le type de retour de la méthode est une chaîne qui fait référence au modèle à restituer. Les modèles sont stockés dans src/main/resources/templates.

Vous pouvez trouver un guide sur le site Web du printemps: https://spring.io/guides / gs / servant-de-contenu-web /

0
JohanB 15 nov. 2017 à 12:34

Il y a quelques clarifications supplémentaires liées à REST et aux vues qui valent la peine d'être apprises. D'après votre question, je peux voir que vous voulez dire «vue» dans le sens de l'interface utilisateur (interface utilisateur) et de l'utilisation typique de MVC. Mais «vue» peut signifier différentes choses dans des contextes différents.

Donc:

  • JSON peut être considéré comme une vue des données
  • JSON est une représentation de la ressource, tout comme HTML l'est
  • JSON n'a pas de style (sauf si vous n'utilisez pas d'extension de navigateur, que la plupart des utilisateurs n'utilisent pas)
  • Le navigateur reconnaît le HTML comme langage de balisage et lui applique un style
  • Les deux sont des types de médias
  • JSON et HTML sont des formats de données
  • Les deux peuvent être transférés sur le fil
0
Miroslav Trninic 2 avril 2020 à 18:17

Cette méthode renvoie une vue

@RequestMapping("/home")
String home(Model model) {  
    return "home";  // resources\templates\home.html
}

Cette méthode renvoie la chaîne

@RequestMapping(value = "/home")
@ResponseBody
public String home() {
    return "Success";
}
0
Ahmet Amasyalı 15 nov. 2017 à 12:23
47307053