首页 > 其他分享 >第03章 SpringBoot获取请求参数

第03章 SpringBoot获取请求参数

时间:2024-10-14 11:18:59浏览次数:15  
标签:03 String age boot name test 请求 SpringBoot

我们首先创建 “SpringBootRequestDemo” 工程。

然后我们修改编码格式以及Maven仓库地址,我们省略这个过程了。 接着我们再添加spring-boot-starter-parent,spring-boot-starter-web,spring-boot-starter-thymeleaf依赖库

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.demo</groupId>
    <artifactId>SpringBootRequestDemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.13</version>
        <relativePath/>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.7.18</version>
            </plugin>
        </plugins>
    </build>

</project>

我们继续创建“Application”的入口类

package com.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {

        SpringApplication.run(Application.class, args);
    }
}

这个文件基本上也是固定不变的。

接下来,我们创建 “resources\static\index.html” 入口文件

<!doctype html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>index</title>
</head>
<body>

<p><a href="/test">test</a></p>

</body>
</html>

我们做了一个 “/test” 的请求,然后我们创建 TestController 来处理这个请求

package com.demo;

import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class TestController {

    @RequestMapping("/test")
    public String hello(Map<String, Object> map) {

        map.put("message", "hello test!");
        return "test";
    }
    
}

我们向“test.html” 输出一个 “message” 的数据,继续创建 “resources\templates\test.html” 文件。

<!doctype html>
<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>test</title>
</head>
<body>

<h1 th:text="${message}"></h1>

</body>
</html>

我们使用上一章节的 “Thymeleaf” 模版输出列表数据。

我们运行整个项目。

Spring Boot获取前端页面参数的几种方式总结

第一,指定前端url请求参数名称与方法参数名一致, 适用get方式,而不适用post方式。

例如请求:http://localhost:8080/test01?name=zhang&age=30
    @RequestMapping("/test01")
    public String test01(String name, String age, Map<String, Object> map){

        map.put("message", name + "-" + age);
        return "test";
    }

这种方式,就是将请求参数作为方法参数,SpringBoot会自动匹配完成数据的填入,我们只需要直接使用方法参数,就可以使用请求参数了。但是,这种方式仅适用于Get请求,运行效果如下

第二,通过HttpServletRequest来获取前端页面参数,适用get和post方式。

例如请求:http://localhost:8080/test02?name=zhang&age=30
    @RequestMapping("/test02")
    public String test02(HttpServletRequest request, Map<String, Object> map){

        String name = request.getParameter("name");
        String age = request.getParameter("age");
        map.put("message", name + "-" + age);
        return "test";
    }

我们可以看出,SpringBoot集成了SpringMVC注解的优点,方法参数可以自定义,这个对我们帮助很大。使用 HttpServletRequest 对象可以获取到用户提交的任何数据,都在期API方法里面。

第三,通过建立一个请求数据对象来获取参数,适用get和 post方式。

例如请求:http://localhost:8080/test03?name=zhang&age=30
package com.demo;

public class TestRequest {

    public String name;
    public int age;

    // 省略get/set方法
}

大家注意到了,请求数据对象里面的属性变量就是请求参数,两者保持一致。

    @RequestMapping("/test03")
    public String test03(TestRequest request, Map<String, Object> map){

        String name = request.getName();
        int age = request.getAge();
        map.put("message", name + "-" + age);
        return "test";
    }

这种方式与第一种差不多,但是支持post请求,不过需要我们手动定义请求数据对象。

对于请求参数比较多的情况下,推荐这种方式(尤其是post请求方式)。

第四,用注解@RequestParam获取请求参数,仅适用get方式。

例如请求:http://localhost:8080/test04?name=zhang&age=30
    @RequestMapping("/test04")
    public String test04(@RequestParam("name") String paramName,
                         @RequestParam("age") String paramAge,
                         Map<String, Object> map){

        map.put("message", paramName + "-" + paramAge);
        return "test";
    }

这种方式还不如第一种简单,但是它可以解决请求参数名和方法参数名不一致的问题。

第五,通过PathVariable注解来获取请求路径的参数,仅适用get方式。

例如请求:http://localhost:8080/test06/zhang/30

请注意,我们的请求URL不一样了,这个称之为PathInfo模式的URL。

    @RequestMapping("/test05/{name}/{age}")
    public String test06(@PathVariable("name") String paramName,
                         @PathVariable("age") String paramAge,
                         Map<String, Object> map){

        map.put("message", paramName + "-" + paramAge);
        return "test";
    }

这种方式需要保持url的名称和注解里面的名称保持一致即可。

第六,用注解@RequestBody获取请求参数,仅适用post方式。

@RequestBody主要用来接收前端传递给后端的json字符串中的数据,并且一个请求只有一个RequestBody。后期我们会介绍这种方式。

标签:03,String,age,boot,name,test,请求,SpringBoot
From: https://blog.csdn.net/richieandndsc/article/details/142912851

相关文章