spring-boot
Services REST
Recherche…
Paramètres
Annotation | Colonne |
---|---|
@Manette | Indique qu'une classe annotée est un "contrôleur" (contrôleur Web). |
@RequestMapping | Annotation pour mapper des requêtes Web sur des classes de gestionnaires spécifiques (si nous les avons utilisées avec class) et / ou des méthodes de gestionnaire (si nous avons utilisé des méthodes). |
method = RequestMethod.GET | Type de méthode de requête HTTP |
ResponseBody | L'annotation qui indique une valeur de retour de méthode doit être liée au corps de la réponse Web |
@RestController | @Controller + ResponseBody |
@ResponseEntity | Extension de HttpEntity qui ajoute un code d'état HttpStatus, nous pouvons contrôler le code http de retour |
Créer un service REST
- Créez un projet en utilisant STS (Spring Starter Project) ou Spring Initializr (sur https://start.spring.io ).
- Ajoutez une dépendance Web dans votre fichier pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
ou tapez Web dans la zone Search for dependencies
, ajoutez la dépendance Web et téléchargez le projet compressé.
- Créer une classe de domaine (utilisateur)
public class User {
private Long id;
private String userName;
private String password;
private String email;
private String firstName;
private String lastName;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Override
public String toString() {
return "User [id=" + id + ", userName=" + userName + ", password=" + password + ", email=" + email
+ ", firstName=" + firstName + ", lastName=" + lastName + "]";
}
public User(Long id, String userName, String password, String email, String firstName, String lastName) {
super();
this.id = id;
this.userName = userName;
this.password = password;
this.email = email;
this.firstName = firstName;
this.lastName = lastName;
}
public User() {}
}
- Créez la classe UserController et ajoutez les annotations
@Controller
,@RequestMapping
@Controller
@RequestMapping(value = "api")
public class UserController {
}
- Définir la variable statique List users pour simuler la base de données et ajouter 2 utilisateurs à la liste
private static List<User> users = new ArrayList<User>();
public UserController() {
User u1 = new User(1L, "shijazi", "password", "[email protected]", "Safwan", "Hijazi");
User u2 = new User(2L, "test", "password", "[email protected]", "test", "test");
users.add(u1);
users.add(u2);
}
- Créer une nouvelle méthode pour renvoyer tous les utilisateurs dans la liste statique (getAllUsers)
@RequestMapping(value = "users", method = RequestMethod.GET)
public @ResponseBody List<User> getAllUsers() {
return users;
}
Exécutez l'application [par
mvn clean install spring-boot:run
] et appelez cette URLhttp://localhost:8080/api/users
Nous pouvons annoter la classe avec
@RestController
, et dans ce cas nous pouvons supprimer le ResponseBody de toutes les méthodes de cette classe(@RestController = @Controller + ResponseBody)
, un autre point nous pouvons contrôler le code http si nous utilisonsResponseEntity
, nous allons implémenter les mêmes fonctions précédentes mais en utilisant@RestController
etResponseEntity
@RestController
@RequestMapping(value = "api2")
public class UserController2 {
private static List<User> users = new ArrayList<User>();
public UserController2() {
User u1 = new User(1L, "shijazi", "password", "[email protected]", "Safwan", "Hijazi");
User u2 = new User(2L, "test", "password", "[email protected]", "test", "test");
users.add(u1);
users.add(u2);
}
@RequestMapping(value = "users", method = RequestMethod.GET)
public ResponseEntity<?> getAllUsers() {
try {
return new ResponseEntity<>(users, HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
maintenant, essayez d'exécuter l'application et appelez cette URL http: // localhost: 8080 / api2 / users
Créer un service de repos avec JERSEY et Spring Boot
Jersey est l'un des nombreux frameworks disponibles pour créer des Rest Services. Cet exemple vous montre comment créer des Rest Services avec Jersey et Spring Boot.
1. Configuration du projet
Vous pouvez créer un nouveau projet en utilisant STS ou en utilisant la page Spring Initializr . Lors de la création d'un projet, incluez les dépendances suivantes:
- Jersey (JAX-RS)
- Web
2.Créer un contrôleur
Laissez-nous créer un contrôleur pour notre service Web Jersey
@Path("/Welcome")
@Component
public class MyController {
@GET
public String welcomeUser(@QueryParam("user") String user){
return "Welcome "+user;
}
}
@Path("/Welcome")
indique au framework que ce contrôleur doit répondre au chemin URI / Welcome
@QueryParam("user")
indique au framework que nous attendons un paramètre de requête avec le nom user
Configurations de Jersey 3.Wiring
Configurons maintenant Jersey Framework avec Spring Boot: Créez une classe, plutôt un composant spring qui étend org.glassfish.jersey.server.ResourceConfig
:
@Component
@ApplicationPath("/MyRestService")
public class JerseyConfig extends ResourceConfig {
/**
* Register all the Controller classes in this method
* to be available for jersey framework
*/
public JerseyConfig() {
register(MyController.class);
}
}
@ApplicationPath("/MyRestService")
indique au framework que seules les requêtes adressées au chemin /MyRestService
sont censées être gérées par le framework jersey, les autres requêtes doivent toujours continuer à être gérées par le framework Spring.
C'est une bonne idée d'annoter la classe de configuration avec @ApplicationPath
, sinon toutes les requêtes seront traitées par Jersey et nous ne pourrons pas le contourner et laisser un contrôleur de printemps le gérer si nécessaire.
4.Done
Démarrez l'application et lancez un exemple d'URL comme (en supposant que vous avez configuré le démarrage par le démarrage pour s'exécuter sur le port 8080):
http://localhost:8080/MyRestService/Welcome?user=User
Vous devriez voir un message dans votre navigateur comme:
Bienvenue utilisateur
Et vous avez terminé avec votre service Web Jersey avec Spring Boot
Consommer une API REST avec RestTemplate (GET)
Pour RestTemplate
une API REST avec RestTemplate
, créez un projet d'amorçage Spring avec initialzr d'amorçage Spring et assurez-vous que la dépendance Web est ajoutée:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Une fois votre projet configuré , créez un bean RestTemplate
. Vous pouvez le faire dans la classe principale qui a déjà été générée ou dans une classe de configuration distincte (une classe annotée avec @Configuration
):
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
Après cela, créez une classe de domaine, similaire à la procédure à suivre pour créer un service REST .
public class User {
private Long id;
private String username;
private String firstname;
private String lastname;
public Long getId() {
return id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
}
Dans votre client, indiquez le RestTemplate
:
@Autowired
private RestTemplate restTemplate;
Pour consommer une API REST qui renvoie un seul utilisateur, vous pouvez désormais utiliser:
String url = "http://example.org/path/to/api";
User response = restTemplate.getForObject(url, User.class);
En utilisant une API REST qui renvoie une liste ou un tableau d'utilisateurs, vous disposez de deux options. Soit le consomme comme un tableau:
String url = "http://example.org/path/to/api";
User[] response = restTemplate.getForObject(url, User[].class);
Ou consommez-le en utilisant ParameterizedTypeReference
:
String url = "http://example.org/path/to/api";
ResponseEntity<List<User>> response = restTemplate.exchange(url, HttpMethod.GET, null, new ParameterizedTypeReference<List<User>>() {});
List<User> data = response.getBody();
Sachez que lorsque vous utilisez ParameterizedTypeReference
, vous devrez utiliser la méthode RestTemplate.exchange()
plus avancée et vous devrez en créer une sous-classe. Dans l'exemple ci-dessus, une classe anonyme est utilisée.