Mục lục
Spring 4.3 giới thiệu một số annotation rút gọn của @RequestMapping cho phép sử dụng các chức năng tương tự nhưng ngắn gọn và bao hàm một ý nghĩa trong đó, giúp mã nguồn dễ đọc hơn.
Các annotation mới thay thế @RequestMapping
Thông thường, nếu bạn muốn triển khai một endpoint sử dụng @RequestMapping annotation thì nó sẽ trông như thế này.
@RequestMapping(value = "/get/{id}", method = RequestMethod.GET)
Cách tiếp cận mới giúp bạn rút ngắn mã code cũng như chú trọng hơn vào endpoint method như GET, POST, PUT, DELETE.
@GetMapping("/get/{id}")
Hiện tại, Spring hỗ trợ 5 annotation để xử lý các HTTP method tương ứng GET, POST, PUT, DELETE và PATCH.
- @GetMapping
- @PostMapping
- @PutMapping
- @DeleteMapping
- @PatchMapping
Từ tên của các annotation trên chúng ta có thể dễ dàng đoán được chúng được thiết kế để xử lý cho các HTTP method nào. Ví dụ @GetMapping dùng để bắt các HTTP GET method, @PostMapping bắt các POST request.
Nguyên tắc hoạt động
Tất cả các annotation trên đều sử dụng @RequestMapping annotation trong nội bộ và chỉ định các giá trị tương ứng cho từng trường hợp. Ví dụ như @GetMapping annotation thì nó sẽ sử chỉ định thuộc tính method = RequestMethod.GET trong @GetMapping.
@Target({ java.lang.annotation.ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @Documented @RequestMapping(method = { RequestMethod.GET }) public @interface GetMapping { // abstract codes }
Tất cả các annotation khác được tạo theo cùng một cách, tức là @PostMapping được chú thích với RequestMethod.POST, @PutMapping là RequestMethod.PUT, v.v.
Ví dụ
Nào, chúng ta sẽ triển khai một ứng dụng đơn giản để kiểm tra cách hoạt động của những annotation này. Đầu tiên chúng ta cần tạo một project Spring Boot với spring-boot-starter-web.
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.2</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.deft</groupId> <artifactId>request-mapping-short-cut</artifactId> <version>0.0.1-SNAPSHOT</version> <name>request-mapping-short-cut</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> </project>
Tiến hành tạo controller với các annotation được chỉ định xử lý cho các GET, POST, PUT, DELETE và PATCH request.
package com.deft; import org.springframework.web.bind.annotation.*; @RestController public class ExampleController { @GetMapping("/get") public String get() { return "Hello world"; } @GetMapping("/get/{id}") public String getId(@PathVariable String id) { return "ID " + id; } @PostMapping("/post") public String post() { return "Post"; } @PutMapping("/put/{id}") public String update() { return "Update"; } @DeleteMapping("delete") public String delete() { return "Delete"; } @PatchMapping("patch") public String patch() { return "Patch"; } }
Kiểm thử
Sau khi đã tạo xong controller, chúng ta có thể kiểm thử bằng nhiều cách khác nhau. Ở đây mình sẽ chọn sử dụng CURL để request trực tiếp đến các API.
Ví dụ như với GET request
@GetMapping("/get") public String get() { return "Hello world"; }
Mình sẽ tiến hành request như sau:
curl http://localhost:8080/get Hello world
Với
@GetMapping("/get/{id}") public String getId(@PathVariable String id) { return "ID " + id; }
Thì request sẽ là
curl http://localhost:8080/get/34 --- ID 34
Post request
@PostMapping("/post") public String post(@RequestBody String body) { return "Body "+ body; }
curl -X POST http://localhost:8080/post --- Post
Kết bài
Như vậy là chúng ta đã tìm hiểu được một số annotation mới sử dụng dạng rút gọn cho @RequestMapping, bản thân mình rất thích sử dụng những annotation vì chúng ngắn gọn và dễ nhìn hơn.
Mã nguồn được mình công khai trên gitlab để các bạn tiện theo dõi hơn: request-mapping-shortcut
Nguồn
https://www.baeldung.com/spring-new-requestmapping-shortcuts