Controllers
Les controlleurs Web MVC
Dans une application web Java avec Spring, plusieurs configurations se feront à l'aide d'annotations. Dans le cas des controleurs, différentes annotations seront utilisées pour les différentes routes et pour le controleur en tant que tel.
Créer un controleur
Bonnes habitudes
Pour garder une architecture de code propre, créez un nouveau package nommé models dans le package principal de l'application.
Dans une application web Spring, un controleur est une classe qui contiendra les diffétentes méthodes liées aux différentes requêtes HTTP et aux différentes URL disponibles dans l'application. On crée donc une classe qu'on annotera avec @Controller.
Méthodes d'action du controleur
Chaque méthode du controleur qui doit retourner une vue aura basoin d'une annotation pour indiquer l'URL à laquelle accéder. Ces méthodes devron également avoir un type de retour String et on retournera le nom de la page à afficher.
Par exemple:
La méthode ci-dessus porte l'annotation @GetMapping("/home"). Ceci nous indique que:
- L'URL pour appeler cette méthode est
http://localhost:8080/{contexte}/home @GetMappingnous indique que cette méthode répondra à une requête HTTP GETreturn "home"; indique qu'on retournera la page JSPhome.jsp`
À l'aide des différentes annotations, il nous sera possible d'avoir plusieurs URL identiques, qui répondront à des méthodes HTTP différentes. Par exemple:
@GetMapping("/ajouter-produit")
public String ajouter() {
return "form-produit";
}
@PostMapping("/ajouter-produit")
public String ajoutProduit() {
// Traitement de l'ajout du produit
return "produits";
}
Dans l'exemple ci-dessus, nous avons deux méthodes correspondant à l'URL se terminant par /ajouter-produit, cependant l'une d'entre elle répond à la requête HTTP GET et l'autre la requête HTTP POST.
URL de base pour un controleur
Il est possible d'assigner un chemin de base à un controleur en utilisant l'annotation @RequestMapping sur la classe. Prenons l'exemple suivant:
@Controller
@RequestMapping("/home")
public class HomeController {
@GetMapping("/accueil")
public String home() {
return "home";
}
@GetMapping("/info")
public String information() {
return "infos";
}
}
Dans cet exemple, pour atteindre les différentes méthodes du controleur, il faudra utiliser /home devant le reste de l'URL des méthodes. Ainsi les URL disponibles seraient
Paramètres des méthodes d'action
Tout comme les servlets, les méthodes d'action peuvent recevoir différents paramètres. Voici ceux qu'on retrouvera fréquemment:
HttpServletRequest: La requêteHttpServletResponse: Le réponseHttpSession: La session de l'utilisateur qui fait la requête- Un paramètre annoté avec
@RequestParam: Paramètre provenant de la requête ou queryString. - Un paramètre annoté
@PathVariable: Paramètre de l'URL Model: L'objet de typeModelpourra remplacer l'objet request pour transmettre de l'information aux pages.- Paramètre annoté
@ModelAttribute: Permet de récupérer des objets complexes provenant d'un formulaire.
Récupérer les paramètres
Prenons comme exemple une application de gestion de produits. Considérons qu'on ait une page pour afficher tous les détails d'un produit et qu'on veuille y accéder avec une URL comprenant l'Id du produit, par exemple:
http://localhost:8080/produits/1
On pourra configurer la méthode d'action du contrôleur de la façon suivante:
@GetMapping("/produits/{idProduit}")
public String afficherProduit(@PathVariable("idProduit") int id) {
// Récupérer le produit de la source de données
return "afficher-produit";
}
Notez que le nom du paramètre dans l'annotation @PathVariable correspond au nom du paramètre dans les accolades dans l'URL.
Pour les paramètres venant de la chaîne de requête (queryString) on utilisera plutôt l'annotatin @RequestParam. Prenons par exemple l'URL suivante:
http://localhost:8080/produits?couleur=rouge&taxable=false
On pourra déclarer la méthode d'action de la façon suivante