SpringMVC(三)请求

目录

一、RequestMapping注解

1.RequestMapping的属性

实例

1.在这里创建文件,命名为Test:

2.复现-返回一个页面:

创建test界面(随便写点什么):

Test文件中编写:

[​编辑 运行:](#编辑 运行:)

3.不返回界面,返回字符串:

编辑Test文件:​编辑

实现这两个小功能后的完整的Test:

2.RequestMapping的请求参数绑定

3.入参情况

1.请求携带一个参数:

2.请求携带两个入参

3.(两个及以上)可以以对象的形式传参

4.杂糅传参

5.用form表单的形式提交

二、不常用的注解

1.RequestParam注解


经过前面对SpringMVC的配置和原理的讲解,接着进行SpringMVC请求的相关讲解。

一、RequestMapping注解

RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系

RequestMapping注解可以作用在方法和类上

  1. 作用在类上:第一级的访问目录

  2. 作用在方法上:第二级的访问目录

  3. 细节:路径可以不编写 / 表示应用的根目录开始

1.RequestMapping的属性

1. path 指定请求路径的url

  1. value value属性和path属性是一样的

3. mthod 指定该方法的请求方式(通常是GET和POST请求,默认GET请求)

现在以实例的形式进行讲解:

实例

1.在这里创建文件,命名为Test:
2.复现-返回一个页面:

在里面写一个方法test1--表示返回一个名为test的界面(既然这里return用了,那么就要保证html中当真存在这么一个方法--去创建)

创建test界面(随便写点什么):
Test文件中编写:
运行:

注意这里项目名称后的一级请求/二级请求,返回test.html界面内容(中文乱码,正常)

3.不返回界面,返回字符串:
编辑Test文件:

更改后端就要重启服务器:

同样步骤得到(这里显示的就是String字符串而非界面了):

实现这两个小功能后的完整的Test:

java 复制代码
package controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller //首先先打上注解-创建对象并且标明这里是Controller层
@RequestMapping(path="/test") //一级请求路径(写不写/都无所谓)
public class Test {
    /**
     * /role/save
     * method="当前方法允许请求方式能访问"
     * params="请求路径上传参数"
     * @return
     */

    //打开页面的请求对应
    @RequestMapping(path="/t1",method={RequestMethod.GET}) //二级请求路径
                                        //这里指定了方法为GET(默认是GET),除此之外还有POST等等
    public String test1(){
        return "test";
    }

    //返回字符串
    @ResponseBody
    @RequestMapping(path="/t2")
    public String test2(){
        return "hello!";
    }


}

2.RequestMapping的请求参数绑定

(1). 绑定机制

  1. 表单提交的数据都是k=v格式的 username=haha&password=123

  2. SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的

  3. 要求:提交表单的name和参数的名称是相同的

(2). 支持的数据类型

  1. 基本数据类型和字符串类型

  2. 实体类型(JavaBean)

  3. 集合数据类型(List、map集合等)

基本数据类型和字符串类型

  1. 提交表单的name和参数的名称是相同的

  2. 区分大小写

实体类型(JavaBean)

  1. 提交表单的name和JavaBean中的属性名称需要一致

  2. 如果一个JavaBean类中包含其他的引用类型,那么表单的name属性需要编写成:对象.属性 例如:address.name

给集合属性数据封装

  1. JSP页面编写方式:list[0].属性

3.入参情况

1.请求携带一个参数:

这里给出一个例子(同样这个例子是写在Test文件中的):

java 复制代码
//一个入参时
    @ResponseBody
    @RequestMapping(path="/t3",method={RequestMethod.GET}) //二级请求路径
    public String test3(String name){
        return name;
    }

重启服务器:

将入参携带在请求中:

2.请求携带两个入参

这里给出一个例子(同样这个例子是写在Test文件中的):

java 复制代码
 //两个及以上不同类型入参
    @ResponseBody
    @RequestMapping(path="/t4",method={RequestMethod.GET}) //二级请求路径
    public String test4(String name,Integer age,char sex){
        return "name="+name+"age="+age+"sex="+sex;
    }

重启服务器:

将入参携带在请求中:

3.(两个及以上)可以以对象的形式传参

创建User类(生成get和set方法):

这里给出一个例子(同样这个例子是写在Test文件中的):

java 复制代码
//对象的形式传参
    @ResponseBody
    @RequestMapping(path="/t5",method={RequestMethod.GET}) //二级请求路径
    public String test5(User user){
       return user.toString();
    }

重启服务器:

将入参携带在请求中:

这里就会遵循对象的原则(只传一个时,其他默认为空)

4.杂糅传参

这里给出一个例子(同样这个例子是写在Test文件中的):

java 复制代码
//杂糅着用
    @ResponseBody
    @RequestMapping(path="/t6",method={RequestMethod.GET}) //二级请求路径
    public String test7(User user,String father){
        return user.toString()+father;
    }

重启服务器:

将入参携带在请求中:

5.用form表单的形式提交

前面我们的传参都是通过请求携带的,现在我们来实现通过Form表单来实现入参:

首先修改想要return的前端界面test.html:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>我是一个复现界面的例子,我是界面!</h1>
<!--加上表单-->
<form action="/StringMVCTestTwice/test/t5" method="get">
    <input type="text" name="name"/><br/>
    <input type="text" name="age"/><br/>
    <input type="text" name="sex"/><br/>
    <input type="submit"/>
</form>
<!--表单结束-->
</body>
</html>

并在Test文件中添加:

java 复制代码
//form的形式传参
    @RequestMapping(path="/t7",method={RequestMethod.GET}) //二级请求路径
    public String test7(User user){
        return "test";
    }

随后重启服务器去调用这个请求:

点击提交(就会自动识别跳转到 t5请求):

二、不常用的注解

1.RequestParam注解

  1. 作用:把请求中的指定名称的参数传递给控制器中的形参赋值

  2. 属性

  3. value:请求参数中的名称

  4. required:请求参数中是否必须提供此参数,默认值是true,必须提供

  5. 代码如下:

java 复制代码
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("/dept")
public class DeptController {
    @RequestMapping("/save")
    public String save(@RequestParam(value = "username",required = false) String name){
        System.out.println(name);
        return "suc";
    }
}
相关推荐
zhyhgx3 小时前
【Spring】什么是Spring?
java·后端·spring·java-ee
大地爱4 小时前
基于SpringBoot和PostGIS的各国及所属机场信息检索及可视化实现
java·spring boot·spring
九圣残炎5 小时前
【异常记录Java-20250204】调用讯飞星火AI(Spark lite 版本)Api 授权错误问题处理
java·人工智能·spring·spark
m0_748246875 小时前
【springboot】Spring 官方抛弃了 Java 8!新idea如何创建java8项目
java·spring boot·spring
憶巷6 小时前
Spring 事务管理
java·spring
Beekeeper&&P...11 小时前
BCrypt加密密码和md5加密哪个更好一点///jwt和rsa有什么区别//为什么spring中经常要用个r类
java·spring·r语言
GGBondlctrl12 小时前
【Spring Boot】Spring 魔法世界:Bean 作用域与生命周期的奇妙之旅
java·spring boot·spring·bean的作用域·bean的生命周期·bean生命周期原码
sjsjsbbsbsn14 小时前
Java Web 开发中的分页与参数校验
java·spring boot·spring·状态模式·hibernate
LUCIAZZZ15 小时前
通过代理模式理解Java注解的实现原理
java·开发语言·数据库·spring boot·mysql·spring·代理模式
计算机-秋大田15 小时前
基于Spring Boot的图书个性化推荐系统的设计与实现(LW+源码+讲解)
java·前端·spring boot·后端·spring·课程设计