Spring Boot中@Requestmapping

在本文中,我们将探讨 Spring Boot 的核心注释 - @RequestMapping,它是 Spring Boot 用于定义的注释集的一部分URL 端点和 REST API。

@RequestMapping
此注释是一种通用且灵活的注释,可与控制器(类)以及将特定 Web 请求映射到处理程序方法和控制器的方法一起使用。此注释是 Spring Framework 提供的一组更大注释的一部分,用于定义 URL 端点并简化 Spring Boot 应用程序的开发。
它具有以下特点:

  • 定义多个不同的端点来访问特定资源。
  • 构建 REST API 来服务 Web 请求。
  • 通过简单地定义提供一组用于处理请求的功能的注释来简化 Web 开发过程。
  • 在单个 @RequestMapping 注释中定义多个端点。

在本文中,我们将使用以下工具:

  • Java 8 或更高版本
  • Java IDE,如 Eclipse、IntelliJ 和 VS code(我们将使用 IntelliJ)
  • 用于测试请求映射的 POSTMAN
  • 依赖项: Spring Web Starter

Mave配置:

<?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>3.2.0</version> 
        <relativePath/> <!-- lookup parent from repository -->
    </parent> 
    <groupId>com.jdon</groupId> 
    <artifactId>RequestMappingExample</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>RequestMappingExample</name> 
    <description>Request Mapping Example</description> 
    <properties> 
        <java.version>17</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> 
  
    <build> 
        <plugins> 
            <plugin> 
                <groupId>org.springframework.boot</groupId> 
                <artifactId>spring-boot-maven-plugin</artifactId> 
            </plugin> 
        </plugins> 
    </build> 
  
</project> 

  • 创建一个新包,用于包含我们将在应用程序中添加的所有控制器,位于 src/main/java/package_name/Controllers 下
  • Controllers包中添加一个新的TestController用于定义请求映射。
  • 使用 @Controller 对 Controller 进行注释,表示该类是一个控制器,在其内部定义了一些 URL 模板,在控制器上使用 @RequestMapping 以及指定哪个 URL 路径将提供什么输出的方法。

下面是Controller的代码实现:

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.ResponseBody; 
  
import java.util.ArrayList; 
import java.util.List; 
  
// Controller class 
@Controller
@ResponseBody
@RequestMapping(
"/test"
public class TestController { 
  
   
// URL Path - 1 
   
// Returns a String 
    @RequestMapping(
"/hello"
    public String sayHello() { 
        System.out.println(
"dsvsdvdsvs"); 
        return
"Hello Geek!"
    } 
  
   
// URL Path - 2 
   
// Returns a String 
    @RequestMapping(
"/sport"
    public String doSomeSport() { 
        return
"Run 5 kilometers today!"
    } 
  
   
// URL Path - 3 
   
// Returns a List 
    @RequestMapping(
"/today/tasks"
    public List<String> todaysTasks() { 
  
        List<String> myTasks = new ArrayList<String>(); 
        myTasks.add(
"Write 5 articles on jdon Today"); 
        myTasks.add(
"Run 5 kilometers"); 
        myTasks.add(
"Do Laundry"); 
  
        return myTasks; 
    } 

我们使用 @RequestMapping 定义了多个端点,可以通过以下 URL 访问:

  • http://localhost:8080/test/hello
  • http://localhost:8080/test/sport
  • http://localhost:8080/test/today/tasks

使用的注解:

  • @Controller:该注解隐式地将类标记为组件,使其符合组件扫描的条件,同时表示该类调用业务逻辑、处理传入的网络请求并返回定制的响应。
  • @ResponseBody:该注解既用于类级,也用于方法级,以表明该类或方法生成的返回值无需解析为 HTML 或 JSP 等视图页面,而应直接序列化为 HTTP 响应体。从 Java 对象到 JSON 的序列化是由一种名为 Jackson Project 的技术完成的,该技术在引擎盖下执行 Jackson 数据绑定。

我们的请求方法可以返回任何类型的数据--POJO(Plain Old Java Objects,普通 Java 对象),这些数据将被 Jackson Project 序列化为 JSON。

请注意,我们在 POSTMAN 中选择的请求类型是 GET,这是因为我们的所有方法都只是返回一些数据,而不是在数据库中进行任何更改(因为我们没有连接到任何数据库)。

更具体地说,@RequestMapping 的实际用途是定义 URL 的起始地址,请求处理程序方法将执行某些操作,根据方法执行的操作类型,我们会用 GET、PUT、POST 或 DELETE 对其进行注解。下面让我们简要了解一下我们可以在特定网络请求中使用的一些最常用的注解类型:

  • @GetMapping:这种注解与请求资源的请求相关联,但不对数据库进行任何更改。
  • @PostMapping:该注解与试图在数据库中添加新数据的请求相关联。例如:添加一条新的学生记录,其中包含学生的所有相关信息,如 student_id、姓名、注册编号、分支等。
  • @PutMapping:该注解与想要更新或更改数据库中已有数据的更新请求相关联。
  • @DeleteMapping:该注解与从数据库中删除持久对象(已存在的数据)相关联。

总之,@RequestMapping 是定义控制器并将网络请求映射到相应方法的核心注解。它是 MVC 的核心注解,用于定义控制器和 URL 路径,作为 Java 开发人员,了解该注解的工作原理和不同变化是非常重要的,你会经常用到它。

  • 它将某些网络请求映射到其特定的控制器和方法。
  • 我们的应用程序中会有多个控制器,那么每个控制器的 URL 模式都会不同,以便识别网络请求并将其映射到相应的控制器。例如,我们可以有一个控制器用于执行数据库操作,另一个控制器用于抛出异常,还有一个控制器用于记录和监控等。每个控制器的请求映射都将有一个唯一的 URL 模式
  • @RequestMapping 也可用于从 URL 获取查询参数。例如,我们需要一个具有特定 ID 的学生。因此,我们可以定义这样一个映射 - https://localhost:8080/student/{id}。{id}是一个动态参数,其输入可以根据请求的不同而变化。{id}周围的大括号表示 URL 这一部分的输入会发生变化。
  • 虽然 @RequestMapping 也可以注释在 Methods 的顶部,但使用 @GET、@PUT、@POST 等特定类型的映射注释会更有效、更易读。