Vous êtes sur la page 1sur 110

Spring Boot : fondamentaux

Achref El Mouelhi

Docteur de l’université d’Aix-Marseille


Chercheur en programmation par contrainte (IA)
Ingénieur en génie logiciel

elmouelhi.achref@gmail.com

H & H: Research and Training 1 / 81


Plan

1 Introduction
2 Premier projet Spring Boot
3 Contrôleur
4 DevTools
5 Vue
Model, ModelMap et ModelAndView
Paramètres de requête et variables de chemin
6 Modèle et persistence de données
7 Thymeleaf
8 Internationalisation (i18n)
9 Service Web

H & H: Research and Training 2 / 81


Introduction

Spring Boot

Spring MVC

un des framework Spring


basé sur l’API Servlet de Java JEE
H I ©
permettant de simplifier le développementE
U L
d’applications web en
respectant le patron de conception O
L M MVC 2
r e f E
A ch
©

H & H: Research and Training 3 / 81


Introduction

Spring Boot

Spring MVC

un des framework Spring


basé sur l’API Servlet de Java JEE
H I ©
permettant de simplifier le développementE
U L
d’applications web en
respectant le patron de conception O
L M MVC 2
r e f E
Problèmes © A
ch
trop de dépendance à gérer (ce qui pose souvent un problème
d’incompatibilité entre les versions)
beaucoup de configuration (JPA, sécurité, contrôleurs, vues...)

H & H: Research and Training 3 / 81


Introduction

Spring Boot

Spring Boot : encore de l’abstraction

I
Pour éviter les problèmes de Spring MVC, Spring Boot propose :
H ©
Les démarreurs (starter) : un démarreur U EestL une dépendance,
contenant un paquet de dépendance, M Opermettant de réaliser un
f
type de projet (Web, Rest...). L
E Ainsi, le développeur n’a plus à
ch
gérer, lui même le r e
probl ème d’incompatibilité entre les versions.
© A
l’auto-configuration : c’est-à-dire laisser Spring Boot configurer le
projet à partir de dépendances ajoutées par le développeur.

H & H: Research and Training 4 / 81


Introduction

Spring Boot
Exemple, pour créer un projet web, il faut ajouter la dépendance Maven suivante :

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 5 / 81


Introduction

Spring Boot
Exemple, pour créer un projet web, il faut ajouter la dépendance Maven suivante :

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

H I ©
U EL
O
f E LM
La dépendance Maven précédente est appelée Starter forme générale

spring-boot-starter-*
ch r e
©A

H & H: Research and Training 5 / 81


Introduction

Spring Boot
Exemple, pour créer un projet web, il faut ajouter la dépendance Maven suivante :

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

H I ©
U EL
O
f E LM
La dépendance Maven précédente est appelée Starter forme générale

spring-boot-starter-*
ch r e
©A
Pour consulter la liste des starters, aller sur

https://docs.spring.io/spring-boot/docs/current
/reference/html/using-boot-build-systems.html

H & H: Research and Training 5 / 81


Introduction

La dépendance spring-boot-starter-web inclut les six dépendances suivantes :


<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
</dependency>
H I ©
EL
<dependency>
<groupId>org.springframework.boot</groupId>

O U
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
f E LM
r e
<groupId>org.hibernate.validator</groupId>
ch
©A
<artifactId>hibernate-validator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
H & H: Research and Training 6 / 81
Introduction

Spring Boot

La dépendance spring-boot-starter-web permet donc de créer


un projet web contenant :
H I ©
un serveur Apache Tomcat
UEL
O
Spring Framework et Spring MVC
f E LM
r
les validateurs d’Hibernate
ch e
©A
jackson pour les données au format JSON
...

H & H: Research and Training 7 / 81


Premier projet Spring Boot

Spring Boot
Création de projet Spring Boot

Aller dans File > New > Other

Chercher Spring, dans Spring Boot sélectionner Spring Starter Project et cli-
quer sur Next >

H I ©
Saisir
EL
M OU
first-spring-boot dans Name,

f E L
com.example dans Group,
e
chr dans Artifact
© A
firstspringboot
com.example.demo dans Package
Cliquer sur Next >

Chercher et cocher la case correspondante à Spring Web, choisir la version 2.3.3 puis
cliquer sur Next >

Valider en cliquant sur Finish

H & H: Research and Training 8 / 81


Premier projet Spring Boot

Spring Boot
Pourquoi a-t-on coché la case Spring Web à la création du projet ?

pour ajouter la dépendance spring-boot-starter-web

H I ©
Contenu de la section dependencies de pom.xml
UEL
<dependencies> O
<dependency>
f E LM
r e
<groupId>org.springframework.boot</groupId>
ch
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
©A
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
H & H: Research and Training 9 / 81
Premier projet Spring Boot

Spring Boot

Remarques
H I ©
EL
Le package contenant le point d’entrée de notre applica-
U
O
tion (la classe contenant le public static void main) est
com.example.demo
f E LM
ch r e
Tous les autres packages dao, model... doivent être dans le pa-
ckage demo. ©A

H & H: Research and Training 10 / 81


Premier projet Spring Boot

Spring Boot

Le point de démarrage de l’application

package com.example.demo;

H I ©
EL
import org.springframework.boot.SpringApplication;

U
import org.springframework.boot.autoconfigure.SpringBootApplication;
O
@SpringBootApplication

f E
public class FirstSpringBootApplication { LM
ch r e
©A
public static void main(String[] args) {
SpringApplication.run(FirstSpringBootApplication.class, args);
}
}

H & H: Research and Training 11 / 81


Premier projet Spring Boot

Spring Boot
Explication

SpringApplication : la classe de démarrage d’une application Spring et qui va créer


une instance de la classe ApplicationContext

ApplicationContext : l’interface centrale d’une application Spring permettant de fournir


des informations de configuration à l’application.
H I ©
EL
@SpringBootApplication : englobe les 3 annotations suivantes :
U
O
f E LM
@Configuration : fait partie du noyau de Spring Framework et
indique que la classe annoté peut contenir des méthodes annotées

ch r e
par @Bean. Ainsi,Spring Container peut traiter la classe et générer
A
des beans qui seront utilisés par l’application.
©
@EnableAutoConfiguration : permet, au démarrage de
Spring, de générer automatiquement les configurations
nécessaires en fonction des dépendances ajoutées.
@ComponentScan : permet de scanner les package contenant des
composants

H & H: Research and Training 12 / 81


Premier projet Spring Boot

Spring Boot

Pour exécuter

Faire un clic droit sur le projet et aller dans Run As et cliquer sur Spring Boot
App

H I ©
EL
Ou faire un clic droit sur la classe FirstSpringBootApplication dans
U
Package Explorer, aller dans Run As et cliquer sur Java Application
O
f E LM
ch r e
©A

H & H: Research and Training 13 / 81


Premier projet Spring Boot

Spring Boot

Pour exécuter

Faire un clic droit sur le projet et aller dans Run As et cliquer sur Spring Boot
App

H I ©
EL
Ou faire un clic droit sur la classe FirstSpringBootApplication dans
U
Package Explorer, aller dans Run As et cliquer sur Java Application
O
f E LM
ch r e
A
La console nous indique
©
Tomcat started on port(s): 8080 (http) with context path ’’

H & H: Research and Training 13 / 81


Premier projet Spring Boot

Spring Boot

Pour exécuter

Faire un clic droit sur le projet et aller dans Run As et cliquer sur Spring Boot
App

H I ©
EL
Ou faire un clic droit sur la classe FirstSpringBootApplication dans
U
Package Explorer, aller dans Run As et cliquer sur Java Application
O
f E LM
ch r e
A
La console nous indique
©
Tomcat started on port(s): 8080 (http) with context path ’’

Allons donc à http://localhost:8080/

H & H: Research and Training 13 / 81


Premier projet Spring Boot

Spring Boot

Résultat : message d’erreur


H I ©
U ELpage HTML ni JSP.
On a créé un projet web, mais on n’a aucune
M O
Spring Boot, comme Spring
conception MVC 2,re f
donc
L MVC, implémente le patron de
Eil nous faut au moins un contrôleur et
une vue. Ach
©

H & H: Research and Training 14 / 81


Contrôleur

Spring Boot

Le contrôleur

H I ©
EL
un des composants du modèle MVC

O U
LM
une classe Java annotée par Controller (ou
RestController)
r e f E
A chête du contrôleur frontal et communique avec le
Il reçoit une requ
modèle© pour préparer et retourner une réponse

H & H: Research and Training 15 / 81


Contrôleur

Spring Boot

Création du contrôleur
Faire clic droit sur le projet
H I ©
EL
Aller dans New > Class
M OU
f E L
Choisir le package com.example.demo.controller
e
chr comme nom de classe
A
Saisir HomeController
©
Ensuite valider

H & H: Research and Training 16 / 81


Contrôleur

Spring Boot
Remplaçons le contenu du HomeController par le code suivant :

package com.example.demo.controller;

import org.springframework.stereotype.Controller;

I ©
import org.springframework.web.bind.annotation.RequestMapping;
H
EL
import org.springframework.web.bind.annotation.RequestMethod;
U
O
LM
@Controller
public class HomeController {
r e f E
A ch ={"/hello", method = RequestMethod.GET)
@RequestMapping(value
©
public void sayHello()

System.out.println("Hello World!");

}
}

H & H: Research and Training 17 / 81


Contrôleur

Spring Boot

Explication

La première ligne indique que notre contrôleur se trouve dans le


package com.example.demo.controller
H I ©
EL
OU
Les trois imports concernent l’utilisation des annotations
M
f
L’annotation @Controller E L
permet de déclarer que la classe
e
chr ôleur Spring
suivante est un contr
A
©de l’annotation @RequestMapping indique la route
La valeur
(/hello ici) et la méthode indique la méthode HTTP (GET ici,
c’est la méthode par défaut).

H & H: Research and Training 18 / 81


Contrôleur

Spring Boot

Attributs de @RequestMapping

path : accepte une chaı̂ne de caractères correspondant à la route

value : alias de path


H I ©
EL
OU
name : permet d’attribuer un nom à la route

L M
e f E
method : verbe ou méthode HTTP

A chle rtableau de paramètre accepté par la méthode


params : contient
©
headers : spécifie les éléments de l’entête

consumes : indique le format de données accepté par la méthode

produces : indique le format de données retourné par la méthode

H & H: Research and Training 19 / 81


Contrôleur

Spring Boot
@RequestMapping(value = "/hello", method = RequestMethod.GET)
peut être remplacé par @GetMapping(value = "/hello")

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
H I ©
EL
import org.springframework.web.bind.annotation.GetMapping;
U
O
LM
@Controller
public class HomeController {
r e f E
A ch= "/hello")
@GetMapping(value
©
public void sayHello() {

System.out.println("Hello World!");

}
}

H & H: Research and Training 20 / 81


Contrôleur

Spring Boot

Testons tout cela


H I ©
EL
Démarrer le serveur Apache Tomcat
M OU
E L
Aller sur l’url http://localhost:8080/hello
f et vérifier qu’un
Hello World! a bien
c h r e été affiché dans la console (d’Eclipse)

©A

H & H: Research and Training 21 / 81


Contrôleur

Spring Boot

Remarque

I ©
On peut aussi annoter le contrôleur par le @RequestMapping
H
UEL
O
@Controller
f E LM
@RequestMapping("/hello")
ch r e
©A
public class HelloController {
...
}

H & H: Research and Training 22 / 81


Contrôleur

Spring Boot
La méthode d’un contrôleur peut être associée à plusieurs routes

@Controller
public class HomeController {

@GetMapping(value = {"/hello", "/"})


public void sayHello() {
H I ©
System.out.println("Hello World!");
U EL
}
O
}

f E LM
ch r e
©A

H & H: Research and Training 23 / 81


Contrôleur

Spring Boot
La méthode d’un contrôleur peut être associée à plusieurs routes

@Controller
public class HomeController {

@GetMapping(value = {"/hello", "/"})


public void sayHello() {
H I ©
System.out.println("Hello World!");
U EL
}
O
}

f E LM
ch r e
© A
La méthode sayHello est accessible via les deux routes suivantes

localhost:8080/firstspringmvc/

localhost:8080/firstspringmvc/hello

H & H: Research and Training 23 / 81


DevTools

Spring Boot

DevTools
H I ©
outil de développement
UEL
O
fonctionnant en mode développement
f E LM
ch r e
permettant de redémarrer le projet après chaque changement
(sauvegarde)
©A

H & H: Research and Training 24 / 81


DevTools

Spring Boot

Intégrer DevTools sous Eclipse


Faire clic droit sur le projet
Aller à Spring > Add DevTools H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 25 / 81


DevTools

Spring Boot

Intégrer DevTools sous Eclipse


Faire clic droit sur le projet
Aller à Spring > Add DevTools H I ©
UEL
O
f E LM
ch r e
Ou ajouter la dépendance Maven suivante
<dependency> ©A
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>

H & H: Research and Training 25 / 81


DevTools

Spring Boot

Avant utilisation, il faut H I ©


UEL
vider le cache du projet O
f E LM
le mettre à jour
ch r e
©A

H & H: Research and Training 26 / 81


Vue

Spring Boot

Constats
H I ©
EL
Dans une application web Spring MVC, le rôle du contrôleur n’est
U
O
pas d’afficher des données dans la console

f ELM
ch r e
C’est plutôt de communiquer avec les différents composants

©A
Afficher la réponse est le rôle de la vue

H & H: Research and Training 27 / 81


Vue

Spring Boot

Les vues avec Spring

Permettent d’afficher des données H I ©


UEL
O
Communiquent avec le contrôleur pour récupérer ces données

f ELM
ch r e
Doivent être créées dans le répertoire views dans WEB-INF

©A
Peuvent être créées avec un simple code JSP, JSTL ou en
utilisant un moteur de templates comme Thymeleaf...

H & H: Research and Training 28 / 81


Vue

Spring Boot
Par défaut

Spring Boot cherche les vues dans un répertoire webapp situé dans src/main.

Le répertoire n’existe pas, il faut le créer.

H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 29 / 81


Vue

Spring Boot
Par défaut

Spring Boot cherche les vues dans un répertoire webapp situé dans src/main.

Le répertoire n’existe pas, il faut le créer.

H I ©
U EL
O
Créons une première vue que nous appelons hello.jsp dans webapp

E LM
<%@ page language="java" contentType="text/html; charset=UTF-8"
f
pageEncoding="UTF-8"%>
<!DOCTYPE html>
ch r e
<html>
<head> ©A
<meta charset="UTF-8">
<title>first jsp called from controller</title>
</head>
<body>
<h1>first jsp called from controller</h1>
</body>
</html>

H & H: Research and Training 29 / 81


Vue

Spring Boot
Appelons hello.jsp à partir du contrôleur
package com.example.demo.controller;

import org.springframework.stereotype.Controller;
I
import org.springframework.web.bind.annotation.GetMapping
H ©
;
U EL
O
@Controller
f ELM
public class HomeController {
ch
@GetMapping(value = "/hello") r e
©A
public String sayHello() {
return "hello.jsp";
}
}

Dans le return, on précise le nom de la vue à afficher (ici c’est hello.jsp)

H & H: Research and Training 30 / 81


Vue

Spring Boot

Remarque

H I ©
En allant à l’URL http://localhost:8080/hello, un
EL
message d’erreur est affiché (circular view).
U
M O
En effet, la dépendance ajout
f E Lée par Spring Boot pour Apache
Tomcat sert seulement
h r e à lancer un projet web.

© Ac la dépendance qui permet à Apache Tomcat


Il faut donc ajouter
de lire les pages JSP

H & H: Research and Training 31 / 81


Vue

Spring Boot

Pour la compatibilité d’Apache Tomcat avec les JSP, on ajoute la


dépendance suivante
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
H I ©
<artifactId>tomcat-embed-jasper</artifactId>
UEL
</dependency>
O
f ELM
ch r e
©A

H & H: Research and Training 32 / 81


Vue

Spring Boot

Pour la compatibilité d’Apache Tomcat avec les JSP, on ajoute la


dépendance suivante
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
H I ©
EL
<artifactId>tomcat-embed-jasper</artifactId>
U
</dependency>
O
f ELM
r e
chon ajoute la dépendance suivante
A
Pour utiliser la JSTL,
©
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>

H & H: Research and Training 32 / 81


Vue

Spring Boot

Avant de tester
H I ©
U
Faites un clic droit sur le projet EL
M O
E
Allez dans Maven > Update
f L Project...
c h
Relancez le projet re
©A

H & H: Research and Training 33 / 81


Vue

Spring Boot
Remarques

On peut préciser un autre répertoire pour les vues (à placer aussi dans webapp)

Pour éviter de préciser chaque fois l’extension et l’emplacement de la vue, on


peut l’indiquer dans application.properties situé dans
H I ©
EL
src/main/resources

O U
f E LM
ch r e
©A

H & H: Research and Training 34 / 81


Vue

Spring Boot
Remarques

On peut préciser un autre répertoire pour les vues (à placer aussi dans webapp)

Pour éviter de préciser chaque fois l’extension et l’emplacement de la vue, on


peut l’indiquer dans application.properties situé dans
H I ©
EL
src/main/resources

O U
f E LM
ch r e
Nouveau contenu d’application.properties

©A
spring.mvc.view.prefix=/views/
spring.mvc.view.suffix=.jsp

H & H: Research and Training 34 / 81


Vue

Spring Boot
Remarques

On peut préciser un autre répertoire pour les vues (à placer aussi dans webapp)

Pour éviter de préciser chaque fois l’extension et l’emplacement de la vue, on


peut l’indiquer dans application.properties situé dans
H I ©
EL
src/main/resources

O U
f E LM
ch r e
Nouveau contenu d’application.properties

©A
spring.mvc.view.prefix=/views/
spring.mvc.view.suffix=.jsp

Toutes les propriétés possibles de application.properties sont ici :


https://docs.spring.io/spring-boot/docs/current/reference/
html/common-application-properties.html
H & H: Research and Training 34 / 81
Vue

Spring Boot
Nouveau contenu du contrôleur
package com.example.demo.controller;

import org.springframework.stereotype.Controller;
I ©
import org.springframework.web.bind.annotation.GetMapping
H
;
U EL
O
@Controller
f ELM
public class HomeController {
ch r e
@GetMapping(value = "/hello")
©A
public String sayHello() {
return "hello";
}
}

N’oublions pas de déplacer hello.jsp dans views qu’il faut le créer dans
webapp
H & H: Research and Training 35 / 81
Vue Model, ModelMap et ModelAndView

Spring Boot

Deux questions
H I ©
U EL
Comment passer des données d’une vue à un contrôleur et d’un
O
contrôleur à une vue ?
f ELM
ch r e
Une vue peut-elle appeler un contrôleur ?
©A

H & H: Research and Training 36 / 81


Vue Model, ModelMap et ModelAndView

Spring Boot
Comment le contrôleur envoie des données à la vue ?
package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
H I ©
EL
import org.springframework.web.bind.annotation.GetMapping
;
O U
LM
@Controller
public class HomeController {
@GetMapping(value = "/hello")
r e f E
ch
©A
public String sayHello(Model model) {
model.addAttribute("nom", "Wick");
return "hello";
}
}
Dans la déclaration de la méthode, on injecte l’interface Model qui nous
permettra d’envoyer des attributs à la vue
H & H: Research and Training 37 / 81
Vue Model, ModelMap et ModelAndView

Spring Boot

Comment la vue récupère les données envoyées par le contrôleur ?

<%@ page language="java" contentType="text/html; charset=UTF-8"


pageEncoding="UTF-8"%>
<html>
<head>
H I ©
EL
<meta http-equiv="Content-Type" content="text/html; charset
U
=UTF-8">
O
</head>
f ELM
<title>first jsp called from controller</title>

<body>
ch r e
©A
<h1>first jsp called from controller</h1>
Je m’appelle ${ nom }
</body>
</html>

Exactement comme dans la plateforme JEE

H & H: Research and Training 38 / 81


Vue Model, ModelMap et ModelAndView

Spring Boot
Une deuxième méthode en utilisant ModelAndView

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import
import
H I ©
org.springframework.web.bind.annotation.RequestMapping;
org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.ui.ModelMap;
U EL
O
@Controller
f ELM
public class HomeController {

ch r e
©A
@RequestMapping(value = "/hello")
public String sayHello(ModelMap model) {

model.addAttribute("nom", "Wick");
return "hello";
}
}

H & H: Research and Training 39 / 81


Vue Model, ModelMap et ModelAndView

Spring Boot
Une troisième méthode en utilisant ModelAndView

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
H I ©
U EL
@Controller
O
public class HomeController {
f ELM
ch r e
@RequestMapping(value = "/hello")

©A
public ModelAndView sayHello(ModelAndView mv) {

mv.setViewName("hello");
mv.addObject("nom", "wick");
return mv;
}
}

H & H: Research and Training 40 / 81


Vue Model, ModelMap et ModelAndView

Spring Boot

Model vs ModelMap vs ModelAndView


Model : est une interface permettant d’ajouter des attributs et de
les passer à la vue
H I ©
U EL
ModelMap : est une classe implémentant l’interface Map et
O
f ELM
permettant d’ajouter des attributs sous forme de key - value

ch r e
et de les passer à la vue. On peut donc chercher un élément
selon la valeur de la clé ou de la valeur
©A
ModelAndView : est un conteneur à la fois d’un ModelMap pour
les attributs et d’un View Object. Le contrôleur pourra ainsi
retourner une seule valeur.

H & H: Research and Training 41 / 81


Vue Paramètres de requête et variables de chemin

Spring Boot

Les paramètres de requête

Ce sont les paramètres qui s’écrivent sous la forme


H I ©
/chemin?param1=value1&param2=value2
U EL
O
f ELM
ch r e
©A

H & H: Research and Training 42 / 81


Vue Paramètres de requête et variables de chemin

Spring Boot

Les paramètres de requête

Ce sont les paramètres qui s’écrivent sous la forme


H I ©
/chemin?param1=value1&param2=value2
U EL
O
f ELM
ch r e
©A
Les variables de chemin
Ce sont les paramètres qui s’écrivent sous la forme /chemin/value

H & H: Research and Training 42 / 81


Vue Paramètres de requête et variables de chemin

Spring Boot
Comment le contrôleur récupère les paramètres de requête ?

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import
import
org.springframework.ui.Model;
org.springframework.web.bind.annotation.GetMapping;
H I ©
import
U EL
org.springframework.web.bind.annotation.RequestParam;
O
@Controller
f ELM
public class HomeController {

ch r e
©A
@GetMapping(value = "/hello")
public String sayHello(@RequestParam(value = "nom") String
nom, Model model) {
model.addAttribute("nom", nom);
return "hello";
}
}

H & H: Research and Training 43 / 81


Vue Paramètres de requête et variables de chemin

Spring Boot

Explication
H I ©
Pour tester, il faut aller sur l’URL
EL
localhost:8080/hello?nom=wick
M OU
@RequestParam(value f E =L"nom") String nom : permet de
c h
récupérer la valeur e
rdu paramètre de la requête HTTP est de
l’affecter© A
au paramètre nom de la méthode.

H & H: Research and Training 44 / 81


Vue Paramètres de requête et variables de chemin

Question

Peut-on accéder à localhost:8080/hello sans préciser le paramètre nom ?

H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 45 / 81


Vue Paramètres de requête et variables de chemin

Question

Peut-on accéder à localhost:8080/hello sans préciser le paramètre nom ?

Réponse

Non, une erreur sera affichée.


H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 45 / 81


Vue Paramètres de requête et variables de chemin

Question

Peut-on accéder à localhost:8080/hello sans préciser le paramètre nom ?

Réponse

Non, une erreur sera affichée.


H I ©
U EL
O
LM
Mais, il est possible de rendre ce paramètre facultatif
@Controller
r e f E
ch
public class HomeController {

©A
@GetMapping(value = "/hello")
public String sayHello(@RequestParam(value = "nom", required = false)
String nom, Model model) {

model.addAttribute("nom", nom);
return "hello";
}
}

H & H: Research and Training 45 / 81


Vue Paramètres de requête et variables de chemin

Spring Boot

Il est possible aussi de préciser une valeur par défaut


@Controller
public class HomeController {
H I ©
@GetMapping(value = "/hello")
U EL
O
public String sayHello(@RequestParam(value = "nom",

f ELM
required = false, defaultValue = "wick") String nom,
Model model) {
ch r e
©A
model.addAttribute("nom", nom);
return "hello";
}
}

H & H: Research and Training 46 / 81


Vue Paramètres de requête et variables de chemin

Spring Boot
Comment le contrôleur récupère une variable de chemin ?

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import
import
org.springframework.web.bind.annotation.GetMapping;
org.springframework.web.bind.annotation.PathVariable;
H I ©
U EL
@Controller
O
public class HomeController {

f E LM
r e
@GetMapping(value = "/hello/{nom}")
ch
public String sayHello(@PathVariable String nom, Model model) {

©A model.addAttribute("nom", nom);
return "hello";
}
}

Pour tester, il faut aller sur l’URL localhost:8080/hello/wick

H & H: Research and Training 47 / 81


Vue Paramètres de requête et variables de chemin

Spring Boot

Comment une vue peut faire appel à une méthode d’un contrôleur ?

H I ©
EL
Soit en utilisant les formulaires et on précise la route dans l’attribut
OU
action et la méthode dans l’attribut method
M
f E L (dans ce cas le verbe HTTP est
Soit en utilisant un lien hypertexte
GET)
chr e
... © A

H & H: Research and Training 48 / 81


Modèle et persistence de données

Spring Boot

Modèle : accès et traitement de données


Utilisation de
H I ©
MySQL pour le stockage de données UEL
O
Hibernate pour le mapping
f E LM
r e
Spring-Data-JPA pour la génération du DAO
ch
©A
Précision de données de connexion dans
application.properties

H & H: Research and Training 49 / 81


Modèle et persistence de données

Spring Boot

Organisation du projet
H I ©
EL
Créons un premier répertoire com.example.demo.model dans
OU
src/main/java où nous placerons les entités JPA
M
f E L com.example.demo.dao dans
Créons un deuxième répertoire
e
src/main/javahorù nous placerons les classes DAO (ou ce
c
© ARepository dans Spring)
qu’on appelle

H & H: Research and Training 50 / 81


Modèle et persistence de données

Spring Boot
Pour ajouter les dépendances MySQL et Spring-Data-JPA

Faire clic droit sur le projet et aller dans Spring > Edit Starters

Cocher les cases respectives de MySQL Driver et Spring Data JPA

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 51 / 81


Modèle et persistence de données

Spring Boot
Pour ajouter les dépendances MySQL et Spring-Data-JPA

Faire clic droit sur le projet et aller dans Spring > Edit Starters

Cocher les cases respectives de MySQL Driver et Spring Data JPA

H I ©
UEL
O
Ou ajouter les dépendances suivantes
f E LM
<dependency>
ch r e
©A
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>

H & H: Research and Training 51 / 81


Modèle et persistence de données

Spring Boot

Dans application.properties, on ajoute les données concernant la connexion à la


base de données et la configuration de Hibernate

spring.datasource.url = jdbc:mysql://localhost:3306/boot?serverTimezone
=UTC
spring.datasource.username = root
H I ©
spring.datasource.password = root
UEL
spring.jpa.hibernate.ddl-auto = update
O
LM
spring.jpa.show-sql = true

MySQL8Dialect
r e E
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.
f
ch
©A
L’ajout de la propriété spring.jpa.hibernate.naming.physical-strategy =
org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
permet de forcer Hibernate à utiliser les mêmes noms pour les tables et les colonnes que les
entités et les attributs.

H & H: Research and Training 52 / 81


Modèle et persistence de données

Spring Boot
L’entité Personne
package com.example.demo.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
H I ©
@Entity
UEL
O
LM
public class Personne {
@Id

e f E
@GeneratedValue(strategy = GenerationType.IDENTITY)
r
ch
private Long num;

©A
private String nom;
private String prenom;
public Personne() { }
public Personne(String nom, String prenom) {
this.nom = nom;
this.prenom = prenom;
}
// + getters / setters
}

H & H: Research and Training 53 / 81


Modèle et persistence de données

Spring Boot

Pour obtenir le DAO, il faut créer une interface qui étend

soit CrudRepository : fournit les méthodes principales pour le


H I ©
EL
CRUD
soit PagingAndSortingRepository : hérite de O U
E LM
CrudRepository et fournit en plus des méthodes de pagination
f
ch r e
et de tri sur les enregistrements

©A
soit JpaRepository : hérite de
PagingAndSortingRepository en plus de certaines autres
méthodes JPA.

H & H: Research and Training 54 / 81


Modèle et persistence de données

Spring Boot

Le repository
package com.example.demo.dao;

import org.springframework.data.jpa.repository.
H I ©
JpaRepository;
U EL
M O
E L
import com.example.demo.model.Personne;
f
r e
chPersonneRepository
© A
public interface
JpaRepository <Personne, Long> {
extends

Long est le type de la clé primaire (Id) de la table (entité) Personne

H & H: Research and Training 55 / 81


Modèle et persistence de données

Spring Boot
Préparons une vue addPerson.jsp
<%@ page language="java" contentType="text/html; charset=
UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
H I ©
<meta charset="UTF-8">
UEL
<title>Adding a new person</title> O
</head>
f E LM
<body>
ch
<h2>Adding a new person</h2> r e
©A
<form action="addPerson" method="post"><br>
Nom : <input type="text" name="nom"><br>
Prénom : <input type="text" name="prenom">
<button type="submit">Envoyer</button>
</form>
</body>
</html>
H & H: Research and Training 56 / 81
Modèle et persistence de données

Spring Boot
Préparons le contrôleur
@Controller
public class PersonneController {
@Autowired
private PersonneRepository personneRepository;

@GetMapping(value = "/addPerson")
H I ©
public String addPerson() {
return "addPerson";
UEL
O
LM
}

e
@PostMapping(value = "/addPerson")
r f E
ch
public ModelAndView addPerson(@RequestParam(value = "nom") String

©A
nom, @RequestParam(value = "prenom") String prenom) {
Personne p1 = new Personne(nom,prenom);
personneRepository.save(p1);
ModelAndView mv = new ModelAndView();
mv.setViewName("confirm");
mv.addObject("nom", nom);
mv.addObject("prenom", prenom);
return mv;
}
}
H & H: Research and Training 57 / 81
Modèle et persistence de données

Spring Boot
La vue confirm.jsp
<%@ page language="java" contentType="text/html;
charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
H I ©
<head>
UEL
O
LM
<meta charset="UTF-8">
<title>Confirm page</title>
r e f E
</head>
ch
<body>
<h1>Welcome</h1>©A
Person named ${ nom } ${ prenom } has been
successfully added.
</body>
</html>

H & H: Research and Training 58 / 81


Modèle et persistence de données

Spring Boot

Pour récupérer la liste de personnes


@GetMapping(value = "/showAll")
public ModelAndView showAll() {
H I ©
ArrayList <Personne> personnes =(ArrayList<
UEL
O
LM
Personne>) personneRepository.findAll();
ModelAndView mv = new ModelAndView();
r e f E
mv.setViewName("result");
ch
©A
mv.addObject("personnes", personnes);
return mv;
}

H & H: Research and Training 59 / 81


Modèle et persistence de données

Spring Boot
La vue result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
H I ©
<head>
<meta charset="UTF-8">
UEL
O
LM
<title>Result page</title>
</head>
<body>
r e f E
ch
©A
<h1>List of persons</h1>
<c:forEach items="${ personnes }" var="personne">
<div>
<c:out value="${ personne.prenom } ${ personne.nom }"/>
</div>
</c:forEach>
</body>
</html>

H & H: Research and Training 60 / 81


Modèle et persistence de données

Spring Boot

Autres méthodes du repository

H I ©
findById() : recherche selon la valeur de la clé primaire

EL de clé primaire
findAllById() : recherche selon un tableau
U
L MO
deleteById() : Supprimer selon la valeur de la clé primaire
deleteAll() : h r e E
f tout
supprimer
Ac
©: modifier
flush()
count(), exists(), existsById()...

H & H: Research and Training 61 / 81


Modèle et persistence de données

Spring Boot
On peut aussi récupérer la liste de personnes par page
@GetMapping(value = "/showAllByPage/{i}/{j}")
public ModelAndView showAllByPage(@PathVariable int i,
@PathVariable int j) {
Page<Personne> personnes = personneRepository.findAll(
PageRequest.of(i, j));
H I ©
ModelAndView mv = new ModelAndView();
UEL
mv.setViewName("result");
O
mv.addObject("personnes", personnes.getContent());
return mv;
f E LM
}
ch r e
©A
Les variables de chemin i et j

i : le numéro de la page (première page d’indice 0)

j : le nombre de personnes par page

H & H: Research and Training 62 / 81


Modèle et persistence de données

Spring Boot
Considérons le contenu suivant de la table Personne

Personne
num nom prenom
1 Durand Philippe
2 Leberre Bernard
H I ©
EL
3 Benammar Pierre
4 Hadad
O U
Karim

LM
5 Wick John

r e f E
ch
©A

H & H: Research and Training 63 / 81


Modèle et persistence de données

Spring Boot
Considérons le contenu suivant de la table Personne

Personne
num nom prenom
1 Durand Philippe
2 Leberre Bernard
H I ©
EL
3 Benammar Pierre
4 Hadad
O U
Karim

LM
5 Wick John

r e f E
ch
©A
En allant sur l’URL localhost:8080/firstspringmvc/showAllByPage/1/2,
le résultat est

Personne
num nom prenom
3 Benammar Pierre
4 Hadad Karim

H & H: Research and Training 63 / 81


Modèle et persistence de données

Spring Boot
On peut aussi récupérer une liste de personnes triée
@GetMapping(value = "/showAllSorted")
public ModelAndView showAllSorted() {
List<Personne> personnes = personneRepository.findAll(
Sort.by("nom").descending());
H I ©
ModelAndView mv = new ModelAndView();
UEL
mv.setViewName("result");
O
mv.addObject("personnes", personnes);
f E LM
}
return mv;
ch r e
©A
Explication

Ici on trie le résultat selon la colonne nom dans l’ordre décroissant

H & H: Research and Training 64 / 81


Modèle et persistence de données

Spring Boot

H I ©
Les méthodes personnalisées du repository
UEL
O
LM
On peut aussi définir nos propres méthodes personnalisées dans le
repository et sans les implémenter.
r e f E
ch
©A

H & H: Research and Training 65 / 81


Modèle et persistence de données

Spring Boot
Le repository
package org.eclipse.FirstSpringMvc.dao;

import java.util.List;
import org.springframework.data.jpa.repository.
H I ©
JpaRepository;
U EL
M O
f E L
import org.eclipse.FirstSpringMvc.model.Personne;
r e
chPersonneRepository
© A
public interface
JpaRepository <Personne, Long> {
extends

List<Personne> findByNomAndPrenom(String nom,


String prenom);
}
nom et prenom : des attributs qui doivent exister dans l’entité Personne.
Il faut respecter le CamelCase
H & H: Research and Training 66 / 81
Modèle et persistence de données

Spring Boot

Le contrôleur
@GetMapping(value = "/showSome")
public ModelAndView showSome(@RequestParam(value =
"nom") String nom, @RequestParam(value = "prenom"
H I ©
) String prenom) {
UEL
ArrayList <Personne> personnes =(ArrayList< O
Personne>) personneRepository.
f E LM
ch r
findByNomAndPrenom(nom, prenom);e
©A
ModelAndView mv = new ModelAndView();
mv.setViewName("result");
mv.addObject("personnes", personnes);
return mv;
}

H & H: Research and Training 67 / 81


Modèle et persistence de données

Spring Boot

Dans la méthode précédente on a utilisé l’opérateur logique And


Mais, on peut aussi utiliser
Or, Between, Like, IsNull...
H I ©
U EL IgnoreCase
StartingWith, EndingWith, Containing,

L
After, Before pour les dates MO
r e f E
A ch
OrderBy, Not, In, NotIn
... ©

H & H: Research and Training 68 / 81


Modèle et persistence de données

Spring Boot

Dans la méthode précédente on a utilisé l’opérateur logique And


Mais, on peut aussi utiliser
Or, Between, Like, IsNull...
H I ©
U EL IgnoreCase
StartingWith, EndingWith, Containing,

L
After, Before pour les dates MO
r e f E
A ch
OrderBy, Not, In, NotIn
... ©

Pour plus de détails : https://docs.spring.io/spring-data


/jpa/docs/current/reference/html/
H & H: Research and Training 68 / 81
Modèle et persistence de données

Spring Boot
On peut également écrire des requêtes HQL (Hiberenate Query Language) avec
l’annotation Query

package org.eclipse.firstspringmvc.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
H I ©
EL
import java.util.List;
M OU
f E L
import org.eclipse.firstspringmvc.model.Personne;

chr e
Personne,©
A
public interface PersonneRepository
Long> {
extends JpaRepository<

@Query("select p from Personne p where p.nom = ?1")


List<Personne> chercherSelonLeNom(String nom);

List<Personne> findByNomAndPrenom(String nom, String prenom);


}

H & H: Research and Training 69 / 81


Thymeleaf

Spring Boot

Intégrer Thymeleaf sous Eclipse


Faire clic droit sur le projet
Aller à Spring > Edit Starters
H I ©
Cocher les cases respectives de Thymeleaf
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 70 / 81


Thymeleaf

Spring Boot

Intégrer Thymeleaf sous Eclipse


Faire clic droit sur le projet
Aller à Spring > Edit Starters
H I ©
Cocher les cases respectives de Thymeleaf
UEL
O
f E LM
r e
ch Maven suivante
A
Ou ajouter la dépendance
©
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</
artifactId>
</dependency>

H & H: Research and Training 70 / 81


Thymeleaf

Spring Boot

Gestion de vues
Créer deux répertoires : jsp et thymeleaf dans le répertoire
views de webapp

H I ©
EL
Déplacer et placer toutes les pages JSP dans jsp

O
Placer les vues Thymeleaf dans thymeleaf U
f E LM
ch r e
©A

H & H: Research and Training 71 / 81


Thymeleaf

Spring Boot

Gestion de vues
Créer deux répertoires : jsp et thymeleaf dans le répertoire
views de webapp

H I ©
EL
Déplacer et placer toutes les pages JSP dans jsp

O
Placer les vues Thymeleaf dans thymeleaf U
f E LM
ch r e
©A
Configurons application.properties
spring.view.view-names=jsp/*
spring.thymeleaf.prefix=/views/
spring.thymeleaf.suffix=.html
spring.thymeleaf.view-names=thymeleaf/*

H & H: Research and Training 71 / 81


Thymeleaf

JSP et Thymeleaf

Dans les contrôleurs, remplacer chaque appel d’une page JSP


return "nomVue";

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 72 / 81


Thymeleaf

JSP et Thymeleaf

Dans les contrôleurs, remplacer chaque appel d’une page JSP


return "nomVue";

H I ©
UEL
Par O
return "jsp/nomVue";
f E LM
ch r e
©A

H & H: Research and Training 72 / 81


Thymeleaf

JSP et Thymeleaf

Dans les contrôleurs, remplacer chaque appel d’une page JSP


return "nomVue";

H I ©
UEL
Par O
return "jsp/nomVue";
f E LM
ch r e
©A
Pour appeler une page Thymeleaf
return "thymeleaf/nomVue";

H & H: Research and Training 72 / 81


Thymeleaf

Spring Boot

Pour tester, créer un contrôleur ThymeleafController


@Controller
public class ThymeleafController {
H I ©
UEL
@GetMapping(value = "/thymeleaf")
O
f E LM
public String displayMessage(Model model) {

ch r e
A
model.addAttribute("message",
©"thymeleaf/index";
return
"Hello World!");

}
}

H & H: Research and Training 73 / 81


Thymeleaf

Spring Boot

La vue index.html
<!DOCTYPE html>
<html xmlns:th="www.thymeleaf.org">
<head>
H I ©
EL
<meta charset="ISO-8859-1">
<title>First Thymeleaf Page</title>
O U
</head>
f E LM
<body>
ch r e
<p th:text = "${ message }"></p>
</body>
</html>
©A

H & H: Research and Training 74 / 81


Thymeleaf

Spring Boot

La vue index.html
<!DOCTYPE html>
<html xmlns:th="www.thymeleaf.org">
<head>
H I ©
EL
<meta charset="ISO-8859-1">
<title>First Thymeleaf Page</title>
O U
</head>
f E LM
<body>
ch r e
<p th:text = "${ message }"></p>
</body>
</html>
©A

En allant à http://localhost:8080/thymeleaf, Hello


World! est affiché
H & H: Research and Training 74 / 81
Internationalisation (i18n)

L’internationalisation (i18n)
Préciser les sources et l’encodage de messages dans
application.properties

spring.messages.encoding=UTF-8
spring.messages.basename=messages

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 75 / 81


Internationalisation (i18n)

L’internationalisation (i18n)
Préciser les sources et l’encodage de messages dans
application.properties

spring.messages.encoding=UTF-8
spring.messages.basename=messages

H I ©
EL
Contenu de messages.properties (dans src/main/resources)
U
L
welcome.text=Bonjour tout le monde MO
r e f E
A ch
©

H & H: Research and Training 75 / 81


Internationalisation (i18n)

L’internationalisation (i18n)
Préciser les sources et l’encodage de messages dans
application.properties

spring.messages.encoding=UTF-8
spring.messages.basename=messages

H I ©
EL
Contenu de messages.properties (dans src/main/resources)
U
L
welcome.text=Bonjour tout le monde MO
r e f E
Contenu de messagesc
A h
en.properties (dans src/main/resources)
© world
welcome.text=Hello

H & H: Research and Training 75 / 81


Internationalisation (i18n)

L’internationalisation (i18n)
Préciser les sources et l’encodage de messages dans
application.properties

spring.messages.encoding=UTF-8
spring.messages.basename=messages

H I ©
EL
Contenu de messages.properties (dans src/main/resources)
U
L
welcome.text=Bonjour tout le monde MO
r e f E
Contenu de messagesc
A h
en.properties (dans src/main/resources)
© world
welcome.text=Hello

Dans une vue (Thymeleaf), ajouter

<h1 th:text = "#{ welcome.text }"></h1>

H & H: Research and Training 75 / 81


Internationalisation (i18n)

Créons la classe de configuration MvcConfig dans com.example.demo.configuration

@Configuration
public class MvcConfig implements WebMvcConfigurer{
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver sessionLocaleResolver = new
SessionLocaleResolver();
sessionLocaleResolver.setDefaultLocale(Locale.FRANCE);
return sessionLocaleResolver;
H I ©
EL
}

O U
LM
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {

e f E
LocaleChangeInterceptor localeChangeInterceptor = new
r
ch
LocaleChangeInterceptor();

©A
localeChangeInterceptor.setParamName("language");
return localeChangeInterceptor;
}

@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
}

H & H: Research and Training 76 / 81


Internationalisation (i18n)

L’internationalisation (i18n)
En allant sur http://localhost:8080/thymeleaf?language=en , le résultat
est :

Hello world

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 77 / 81


Internationalisation (i18n)

L’internationalisation (i18n)
En allant sur http://localhost:8080/thymeleaf?language=en , le résultat
est :

Hello world

H I ©
UEL
O
En allant sur http://localhost:8080/thymeleaf?language=fr , le résultat
est :
f E LM
Bonjour tout le monde
ch r e
©A

H & H: Research and Training 77 / 81


Internationalisation (i18n)

L’internationalisation (i18n)
En allant sur http://localhost:8080/thymeleaf?language=en , le résultat
est :

Hello world

H I ©
UEL
O
En allant sur http://localhost:8080/thymeleaf?language=fr , le résultat
est :
f E LM
Bonjour tout le monde
ch r e
©A
En allant sur http://localhost:8080/thymeleaf?language=it , le résultat
est toujours le même :

Bonjour tout le monde

H & H: Research and Training 77 / 81


Service Web

Spring Boot
Considérons le contrôleur PersonneRestController
@RestController
public class PersonneRestController {

@Autowired
private PersonneRepository personneRepository;

H I ©
EL
@GetMapping("/personnes")
public List<Personne> getPersonnes() {
return personneRepository.findAll();
O U
}

f E LM
ch r
@GetMapping("/personnes/{id}") e
©A
public Personne getPersonne(@PathVariable("id") long id) {
return personneRepository.findById(id).orElse(null);
}

@PostMapping("/personnes")
public Personne addPersonne(@RequestBody Personne personne) {
System.out.println(personne);
return personneRepository.save(personne);
}
}
H & H: Research and Training 78 / 81
Service Web

Spring Boot
Modifions le point d’entrée (qui implémentera l’interface ApplicationRunner) pour
ajouter des tuples dans la base de données avant d’appeler nos services REST

@SpringBootApplication
public class FirstSpringBootApplication implements ApplicationRunner {

@Autowired
H I ©
EL
private PersonneRepository personneRepository;

public static void main(String[] args) {


O U
}
f E LM
SpringApplication.run(FirstSpringBootApplication.class, args);

ch r e
©A
@Override
public void run(ApplicationArguments args) throws Exception {
// TODO Auto-generated method stub
Personne personne1 = new Personne("wick", "john");
Personne personne2 = new Personne("dalton", "jack");
personneRepository.save(personne1);
personneRepository.save(personne2);
}
}

H & H: Research and Training 79 / 81


Service Web

Spring Boot

Pour tester
Aller sur localhost:8080/personnes
Ou sur localhost:8080/personnes/1
H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 80 / 81


Service Web

Spring Boot

Pour tester
Aller sur localhost:8080/personnes
Ou sur localhost:8080/personnes/1
H I ©
U EL
O
Pour ajouter une personne
f E LM
r e
h précisant la méthode POST et l’url
cen
© A
utiliser Postman
localhost:8080/personne
dans Headers, préciser la clé Accept et la valeur
application/json
dans Body, cocher raw et sélectionner
JSON(application/json)

H & H: Research and Training 80 / 81


Service Web

Spring Boot
Propriété server.servlet.context-path de application.properties

Elle sert à définir un chemin de contexte pour un projet Spring Boot (comme dans les
applications JEE et Spring MVC)

Si on lui affecte la valeur /firstspringboot, il faudra utiliser l’URL

personnes
H I ©
localhost:8080/firstspringboot/personnes pour récupérer la liste de

U EL
O
f E LM
ch r e
©A

H & H: Research and Training 81 / 81


Service Web

Spring Boot
Propriété server.servlet.context-path de application.properties

Elle sert à définir un chemin de contexte pour un projet Spring Boot (comme dans les
applications JEE et Spring MVC)

Si on lui affecte la valeur /firstspringboot, il faudra utiliser l’URL

personnes
H I ©
localhost:8080/firstspringboot/personnes pour récupérer la liste de

U EL
O
f E LM
ch r e
On peut aussi modifier le chemin de contexte à partir de la classe de démarrage

©A
@SpringBootApplication
public class FirstSpringBootApplication {

public static void main(String[] args) {


System.setProperty("server.servlet.context-path", "/firstspringboot
");
SpringApplication.run(FirstSpringBootApplication.class, args);
}
}

H & H: Research and Training 81 / 81

Vous aimerez peut-être aussi