Các annotation mới thay thế cho @RequestMapping – Spring Boot

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

1 1 vote
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x