framework-web:spring:controllers

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
framework-web:spring:controllers [2019/01/22 02:44] jcheronframework-web:spring:controllers [2023/09/26 23:51] (Version actuelle) – [Redirections] jcheron
Ligne 16: Ligne 16:
  
 </sxh> </sxh>
 +
 +===== Request =====
 +Les annotations **@RequestMapping** et dérivées permettent de définir le routage :
 +
 +<sxh java>
 +@Controller
 +@RequestMapping("/persons")
 +class PersonController {
 +
 +    @GetMapping("/{id}")
 +    public Person getPerson(@PathVariable Long id) {
 +        // ...
 +    }
 +
 +    @PostMapping
 +    @ResponseStatus(HttpStatus.CREATED)
 +    public void add(@RequestBody Person person) {
 +        // ...
 +    }
 +}</sxh>
 +
 +**Url définies :**
 +
 +  * GET: /persons/1 => Affiche la personne d'id 1
 +  * POST: /persons => Ajoute la personne passée en paramètre
 +
 +  * voir [[https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-requestmapping|Request mapping]]
 +
 +**Injection de dépendance :**
 +
 +Certains objets, en fonction de leur type, ou grâce aux annotations, peuvent-être directement passés à une méthode de contrôleur.
 +
 +**Exemple :** récupération de la requête **HttpServletRequest** 
 +<sxh java>
 +    @GetMapping("/{id}")
 +    public Person getPerson(@PathVariable Long id, HttpServletRequest request) {
 +        // ...
 +    }
 +</sxh>
 +
 +  * voir [[https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-arguments|Methods arguments]]
 +
 +===== Response =====
 +
 +==== Affichage direct ====
 +
 +Sans passage par une vue, la chaîne retournée constitue le response body.
 +
 +<sxh java>
 + @RequestMapping
 + public @ResponseBody String index() {
 + return "Hello World!";
 + }
 +</sxh>
 +
 +==== Appel d'une vue ====
 +
 +Par défaut, le String retourné correspond à un nom de vue (dans ce cas main/index.html à partir du dossier des templates défini dans application.properties):
 +
 +<sxh java>
 + @RequestMapping
 + public String index() {
 + return "main/index";
 + }
 +</sxh>
 +
 +=== Passage de variables à la vue ===
 +
 +Il est possible d'injecter une instance de la classe **ModelMap** ou **Model** :
 +
 +<sxh java>
 + @getMapping
 + public String messageAction(ModelMap model) {
 + model.put("message","Ceci est un message");
 + return "main/index";
 + }
 +</sxh>
 +
 +Il est également possible de charger une vue et de lui passer des variables depuis une instance de **ModelAndView** :
 +
 +<sxh java>
 + @RequestMapping
 + public ModelAndView index() {
 + ModelAndView mv=new ModelAndView("main/index");
 + mv.addObject("Title","Titre de la page");
 + return mv;
 + }
 +</sxh>
 +
 +voir [[https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-return-types|Return values]]
 +
 +==== Redirections ====
 +
 +Une action d'un contrôleur peut éventuellement rediriger vers une autre action, après avoir effectué ses propres traitements, avec éventuel passage de paramètres de type flash :
 +
 +<sxh java>
 + @RequestMapping
 + public RedirectView submitAction(@RequestParam String value, RedirectAttributes attrs) {
 + //Traitements
 + attrs.addFlashAttribute("message","Formulaire envoyé...");
 + return new RedirectView("/");
 + }
 +</sxh>
 +
 +La vue associée à la route **/** pourra accéder à la variable **message** et l'afficher.
 +
 +
 ====== Ressources ====== ====== Ressources ======
   * [[http://www.baeldung.com/spring-requestmapping|RequestMapping annotation]]   * [[http://www.baeldung.com/spring-requestmapping|RequestMapping annotation]]
  • framework-web/spring/controllers.1548121474.txt.gz
  • Dernière modification : il y a 6 ans
  • (modification externe)