Spring @RequestMapping Neue Verknüpfungsanmerkungen

1. Übersicht

Feder 4.3. führte einige sehr coole Annotationen auf Methodenebene ein, um die Verarbeitung von @RequestMapping in typischen Spring MVC-Projekten zu vereinfachen .

In diesem Artikel erfahren Sie, wie Sie sie effizient einsetzen können.

2. Neue Anmerkungen

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

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

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

@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 und PATCH . Diese Anmerkungen sind:

  • @ GetMapping
  • @ PostMapping
  • @ PutMapping
  • @ DeleteMapping
  • @PatchMapping

Aus der Namenskonvention können wir ersehen, dass jede Anmerkung den jeweiligen Typ der eingehenden Anforderungsmethode behandeln soll, dh @GetMapping wird verwendet, um den GET- Typ der Anforderungsmethode zu behandeln , @PostMapping wird verwendet, um den POST- Typ der Anforderungsmethode zu behandeln usw.

3. Wie es funktioniert

Alle obigen Anmerkungen sind bereits intern mit @RequestMapping und dem entsprechenden Wert im Methodenelement versehen .

Wenn wir uns beispielsweise den Quellcode der Annotation @GetMapping ansehen , sehen wir, dass er bereits mit RequestMethod.GET wie folgt kommentiert 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, dh @PostMapping wird mit RequestMethod.POST , @PutMapping mit RequestMethod.PUT usw. mit Anmerkungen versehen .

Den vollständigen Quellcode der Anmerkungen finden Sie hier.

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 in die Datei pom.xml einfügen müssen:

 org.springframework spring-webmvc 5.2.2.RELEASE 

Die neueste Version von spring-webmvc ist im Central Maven Repository verfügbar.

Jetzt müssen wir den Controller erstellen, um die URL eingehender 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 die richtigen eingehenden HTTP-Methoden mit URI zu verarbeiten . Beispiel: @GetMapping für die Verarbeitung des URI "/ get", @PostMapping für die Verarbeitung des URI "/ post" usw.

  • Da wir eine REST-basierte Anwendung erstellen, geben wir eine konstante Zeichenfolge (für jeden Anforderungstyp eindeutig) mit 200 Antwortcodes zurück, um die Anwendung zu vereinfachen. In diesem Fall haben wir die @ ResponseBody- Annotation von Spring verwendet .
  • Wenn wir eine URL- Pfadvariable verarbeiten 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 mit JUnit einige Testfälle erstellen. Wir würden SpringJUnit4ClassRunner 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.

Lassen Sie uns den Beispieltestfall von @GetMapping vereinfachen:

@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 GET- URL "/ get" drücken.

Erstellen wir nun den Testfall zum Testen von @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()); }

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

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

6. Fazit

In diesem Artikel hatten wir eine kurze Einführung in die verschiedenen Arten von @ RequestMapping- Verknüpfungen für eine schnelle Webentwicklung unter Verwendung des traditionellen Spring MVC-Frameworks. Wir können diese schnellen Verknüpfungen verwenden, um eine saubere Codebasis zu erstellen.

Wie immer finden Sie den Quellcode für dieses Tutorial im Github-Projekt.