Spring @RequestMapping Neue Verknüpfungskommentare

Spring @RequestMapping Neue Verknüpfungen

1. Überblick

Feder 4.3. introduced einige sehr coole Annotationen auf Methodenebene, um die Behandlung von@RequestMapping in typischen Spring MVC-Projekten zu glätten.

In diesem Artikel lernen wir, wie man sie effizient einsetzt.

2. Neue Anmerkungen

Wenn wir den URL-Handler mithilfe der herkömmlichen Annotation@RequestMappingimplementieren möchten, wäre dies normalerweise ungefähr so ​​gewesen:

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

Der neue Ansatz ermöglicht es, diese einfach zu verkürzen:

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

Spring unterstützt derzeit fünf Arten von integrierten Anmerkungen für die Verarbeitung verschiedener Arten von eingehenden HTTP-Anforderungsmethoden:GET, POST, PUT, DELETE undPATCH. Diese Anmerkungen sind:

  • @ GetMapping

  • @ PostMapping

  • @ PutMapping

  • @ DeleteMapping

  • @PatchMapping

Aus der Namenskonvention können wir ersehen, dass jede Annotation den jeweiligen eingehenden Anforderungsmethodentyp handhaben soll, d. H. @GetMapping wird verwendet, um die Art der Anforderungsmethode vonGETzu verarbeiten,@PostMapping wird verwendet, um die Art der Anforderungsmethode vonPOSTzu behandeln usw.

3. Wie es funktioniert

Alle obigen Anmerkungen sind bereits intern mit@RequestMapping und dem jeweiligen Wert im Elementmethod versehen.

Wenn wir uns beispielsweise den Quellcode der Annotation von@GetMappingansehen, sehen wir, dass er bereits wie folgt mitRequestMethod.GET annotiert ist:

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

Alle anderen Anmerkungen werden auf die gleiche Weise erstellt, d. H. @PostMapping wird mitRequestMethod.POST,@PutMapping mitRequestMethod.PUT, usw. kommentiert.

Der vollständige Quellcode der Anmerkungen ist inhere verfügbar.

4. Implementierung

Versuchen wir, diese Anmerkungen zu verwenden, um eine schnelle REST-Anwendung zu erstellen.

Bitte beachten Sie, dass wir, da wir Maven zum Erstellen des Projekts und Spring MVC zum Erstellen unserer Anwendung verwenden würden, die erforderlichen Abhängigkeiten inpom.xml: hinzufügen müssen


    org.springframework
    spring-webmvc
    4.3.6.RELEASE

Die neueste Version vonspring-webmvc ist inCentral Maven Repository verfügbar.

Jetzt müssen wir den Controller erstellen, um die URL für eingehende Anforderungen zuzuordnen. In diesem Controller würden wir alle diese Anmerkungen einzeln verwenden.

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);
}

Zu beachtende Punkte:

  • Wir haben die erforderlichen Anmerkungen verwendet, um ordnungsgemäße eingehende HTTP-Methoden mit URI.zu verarbeiten. Beispiel:@GetMapping, um URI "/ get" zu verarbeiten,@PostMapping, um URI "/ post" zu verarbeiten, und so weiter __ __

  • Da wir eine REST-basierte Anwendung erstellen, geben wir eine konstante Zeichenfolge (eindeutig für jeden Anforderungstyp) mit 200 Antwortcodes zurück, um die Anwendung zu vereinfachen. In diesem Fall haben wir die Annotation@ResponseBodyvon Spring verwendet.

  • Wenn wir mit einer URL-Pfadvariablen umgehen müssten, könnten wir dies einfach viel weniger tun, als wir es bei Verwendung von@RequestMapping. getan haben

5. Testen der Anwendung

Um die Anwendung zu testen, müssen wir einige Testfälle mit JUnit erstellen. Wir würdenSpringJUnit4ClassRunner verwenden, um die Testklasse zu initiieren. Wir würden fünf verschiedene Testfälle erstellen, um jede Annotation und jeden Handler zu testen, den wir im Controller deklariert haben.

Vereinfachen wir den Beispieltestfall von@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());

}

Wie wir sehen können, erwarten wir eine konstante Zeichenfolge "GET Response", sobald wir die URL "/ get" vonGET treffen.

Erstellen wir nun den Testfall, um@PostMapping zu testen:

@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());

}

Auf die gleiche Weise haben wir den Rest der Testfälle erstellt, um alle HTTP-Methoden zu testen.

Alternativ können wir jederzeit einen gängigen REST-Client verwenden, z. B. PostMan, RESTClient usw., um unsere Anwendung zu testen. In diesem Fall müssen wir etwas vorsichtig sein, um den richtigen HTTP-Methodentyp auszuwählen, während wir den Rest-Client verwenden. Andernfalls würde der Fehlerstatus 405 ausgelöst.

6. Fazit

In diesem Artikel hatten wir eine kurze Einführung in die verschiedenen Arten von@RequestMapping-Verknüpfungen für die schnelle Webentwicklung unter Verwendung des traditionellen Spring MVC-Frameworks. We can utilize these quick shortcuts to create a clean code base.

Wie immer finden Sie den Quellcode für dieses Tutorial inGithub project.