Spring @RequestMapping Nouvelles annotations de raccourcis

Spring @RequestMapping Nouvelles annotations de raccourcis

1. Vue d'ensemble

Printemps 4.3. introduced quelques annotations composées au niveau de la méthode très cool pour lisser la gestion des@RequestMapping dans les projets Spring MVC typiques.

Dans cet article, nous allons apprendre à les utiliser efficacement.

2. Nouvelles annotations

En règle générale, si nous voulons implémenter le gestionnaire d'URL en utilisant l'annotation traditionnelle@RequestMapping, cela aurait été quelque chose comme ceci:

@RequestMapping(value = "/get/{id}", method = RequestMethod.GET)

La nouvelle approche permet de raccourcir cela simplement pour:

@GetMapping("/get/{id}")

Spring prend actuellement en charge cinq types d'annotations intégrées pour gérer différents types de méthodes de requête HTTP entrantes qui sontGET, POST, PUT, DELETE etPATCH. Ces annotations sont:

  • @GetMapping

  • @PostMapping

  • @PutMapping

  • @DeleteMapping

  • @PatchMapping

La convention de dénomination indique que chaque annotation est censée gérer le type de méthode de requête entrante respectif, c'est-à-dire @GetMapping est utilisé pour gérer le type de méthode de requêteGET,@PostMapping est utilisé pour gérer le type de méthode de requêtePOST, etc.

3. Comment ça fonctionne

Toutes les annotations ci-dessus sont déjà annotées en interne avec@RequestMapping et la valeur respective dans l'élémentmethod.

Par exemple, si nous examinons le code source de l'annotation@GetMapping, nous pouvons voir qu'il est déjà annoté avecRequestMethod.GET de la manière suivante:

@Target({ java.lang.annotation.ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = { RequestMethod.GET })
public @interface GetMapping {
    // abstract codes
}

Toutes les autres annotations sont créées de la même manière, c.-à-d. @PostMapping est annoté avecRequestMethod.POST,@PutMapping est annoté avecRequestMethod.PUT, etc.

Le code source complet des annotations est disponiblehere.

4. la mise en oeuvre

Essayons d'utiliser ces annotations pour créer une application REST rapide.

Veuillez noter que puisque nous utiliserions Maven pour construire le projet et Spring MVC pour créer notre application, nous devons ajouter les dépendances nécessaires dans lespom.xml:


    org.springframework
    spring-webmvc
    4.3.6.RELEASE

La dernière version despring-webmvc est disponible dans lesCentral Maven Repository.

Maintenant, nous devons créer le contrôleur pour mapper l'URL de la demande entrante. Dans ce contrôleur, nous utiliserions toutes ces annotations une par une.

4.1. @GetMapping

@GetMapping("/get")
public @ResponseBody ResponseEntity get() {
    return new ResponseEntity("GET Response", HttpStatus.OK);
}
@GetMapping("/get/{id}")
public @ResponseBody ResponseEntity
  getById(@PathVariable String id) {
    return new ResponseEntity("GET Response : "
      + id, HttpStatus.OK);
}

4.2. @PostMapping

@PostMapping("/post")
public @ResponseBody ResponseEntity post() {
    return new ResponseEntity("POST Response", HttpStatus.OK);
}

4.3. @PutMapping

@PutMapping("/put")
public @ResponseBody ResponseEntity put() {
    return new ResponseEntity("PUT Response", HttpStatus.OK);
}

4.4. @DeleteMapping

@DeleteMapping("/delete")
public @ResponseBody ResponseEntity delete() {
    return new ResponseEntity("DELETE Response", HttpStatus.OK);
}

4.5. @PatchMapping

@PatchMapping("/patch")
public @ResponseBody ResponseEntity patch() {
    return new ResponseEntity("PATCH Response", HttpStatus.OK);
}

Points à noter:

  • Nous avons utilisé les annotations nécessaires pour gérer les méthodes HTTP entrantes appropriées avec l'URI. Par exemple,@GetMapping pour gérer l'URI «/ get»,@PostMapping pour gérer l'URI «/ post» et ainsi de suite __

  • Dans la mesure où nous créons une application basée sur REST, nous renvoyons une chaîne constante (unique pour chaque type de demande) avec 200 codes de réponse pour simplifier l'application. Nous avons utilisé l'annotation@ResponseBody de Spring dans ce cas.

  • Si nous devions gérer une variable de chemin d'URL, nous pouvons simplement le faire d'une manière beaucoup moins importante que nous avions l'habitude de faire en cas d'utilisation de@RequestMapping.

5. Test de l'application

Pour tester l'application, nous devons créer deux cas de test à l'aide de JUnit. Nous utiliserionsSpringJUnit4ClassRunner pour lancer la classe de test. Nous créerions cinq cas de test différents pour tester chaque annotation et chaque gestionnaire déclarés dans le contrôleur.

Prenons simplement l'exemple de cas de test de@GetMapping:

@Test
public void giventUrl_whenGetRequest_thenFindGetResponse()
  throws Exception {

    MockHttpServletRequestBuilder builder = MockMvcRequestBuilders
      .get("/get");

    ResultMatcher contentMatcher = MockMvcResultMatchers.content()
      .string("GET Response");

    this.mockMvc.perform(builder).andExpect(contentMatcher)
      .andExpect(MockMvcResultMatchers.status().isOk());

}

Comme nous pouvons le voir, nous attendons une chaîne constante «GET Response», une fois que nous avons atteint l'URL deGET «/ get».

Maintenant, créons le scénario de test pour tester@PostMapping:

@Test
public void givenUrl_whenPostRequest_thenFindPostResponse()
  throws Exception {

    MockHttpServletRequestBuilder builder = MockMvcRequestBuilders
      .post("/post");

    ResultMatcher contentMatcher = MockMvcResultMatchers.content()
      .string("POST Response");

    this.mockMvc.perform(builder).andExpect(contentMatcher)
      .andExpect(MockMvcResultMatchers.status().isOk());

}

De la même manière, nous avons créé le reste des cas de test pour tester toutes les méthodes HTTP.

Sinon, nous pouvons toujours utiliser n'importe quel client REST commun, par exemple PostMan, RESTClient, etc., pour tester notre application. Dans ce cas, nous devons faire un peu attention pour choisir le type de méthode HTTP correct tout en utilisant le client restant. Sinon, le statut d'erreur 405 serait renvoyé.

6. Conclusion

Dans cet article, nous avons eu une introduction rapide aux différents types de raccourcis@RequestMapping pour un développement Web rapide à l'aide du framework Spring MVC traditionnel. We can utilize these quick shortcuts to create a clean code base.

Comme toujours, vous pouvez trouver le code source de ce tutoriel dans lesGithub project.