当前位置: 首页 > article >正文

Spring MVC学习——发送请求(@RequestMapping注解及请求参数绑定)

前言

        Spring MVC作为Spring框架中的核心组件之一,其强大的功能在于能简洁高效地处理HTTP请求和响应。在开发Web应用时,理解和正确使用Spring MVC的注解,尤其是@RequestMapping注解,至关重要。本文将详细讲解@RequestMapping注解的使用方法,及其如何绑定请求参数到控制器方法的参数。

一、@RequestMapping注解的使用

@RequestMapping注解是Spring MVC中最常用的注解之一,主要用于处理HTTP请求。它通过建立请求URL和处理方法之间的映射关系,从而确定请求的处理逻辑。

1.1 作用与基本使用

@RequestMapping可以作用在方法上和类上:

  • 作用在类上:指定请求的一级路径。
  • 作用在方法上:指定请求的二级路径。

路径可以省略“/”,表示从应用的根目录开始。

@Controller
@RequestMapping(path = "/role")  // 一级请求路径
public class RoleController {

    /**
     * 处理请求 /role/save
     * method="GET" 指定请求方式
     * params="请求路径上传的参数"
     */
    @RequestMapping(path = "/save", method = RequestMethod.GET)
    public String save() {
        System.out.println("保存角色...");
        return "suc";
    }

    @RequestMapping(value = "/delete")
    public String delete() {
        System.out.println("删除角色...");
        return "suc";
    }
}

1.2 RequestMapping的属性

@RequestMapping注解的常用属性包括:

  • pathvalue:指定请求的路径。
  • method:指定请求方式,如GET、POST等。
  • params:指定请求参数,当请求包含特定参数时,才会匹配该方法。
@RequestMapping(path = "/save", method = RequestMethod.POST, params = "action=save")
public String save() {
    // 处理POST请求,且必须包含参数action=save
    return "suc";
}

二、请求参数绑定

Spring MVC提供了自动绑定请求参数到控制器方法的功能。无论是简单的基础类型,还是复杂的JavaBean,Spring都能自动进行类型转换。

2.1 参数绑定机制

当用户提交一个表单时,Spring MVC会自动将表单提交的参数(k=v格式)与控制器方法的参数进行绑定。默认情况下,表单的name属性值与方法的参数名称需要一致。

2.2 支持的数据类型

Spring MVC支持以下类型的请求参数绑定:

  • 基本数据类型:如int, boolean, String等。
  • 实体类型(JavaBean):当参数为一个Java对象时,Spring MVC会将请求参数映射到该对象的属性。
  • 集合类型:如List, Map等集合类。
例子:基本数据类型和JavaBean
@Controller
@RequestMapping("/user")
public class UserController {

    // 绑定基础数据类型
    @RequestMapping("/save")
    public String save(String username, Integer age) {
        System.out.println("Username: " + username);
        System.out.println("Age: " + age);
        return "suc";
    }

    // 绑定JavaBean
    @RequestMapping("/save1")
    public String save1(User user) {
        System.out.println(user);
        return "suc";
    }

    // 绑定JavaBean包含对象的情况
    @RequestMapping("/save2")
    public String save2(User user) {
        System.out.println(user);
        return "suc";
    }

    // 绑定JavaBean包含集合的情况
    @RequestMapping("/save3")
    public String save3(User user) {
        System.out.println(user);
        return "suc";
    }
}
JSP页面:表单提交
<html>
<head>
    <meta charset="utf-8">
    <title>请求参数绑定</title>
</head>
<body>
    <h1>基础数据类型绑定</h1>
    <form action="/user/save" method="get">
        <input type="text" name="username"/><br/>
        <input type="text" name="age"/><br/>
        <input type="submit"/>
    </form>

    <h1>JavaBean绑定</h1>
    <form action="/user/save1" method="post">
        <input type="text" name="username"/><br/>
        <input type="text" name="age"/><br/>
        <input type="submit"/>
    </form>

    <h1>JavaBean包含对象绑定</h1>
    <form action="/user/save2" method="post">
        <input type="text" name="username"/><br/>
        <input type="text" name="age"/><br/>
        <input type="text" name="account.money"/><br/>
        <input type="submit"/>
    </form>

    <h1>JavaBean包含集合绑定</h1>
    <form action="/user/save3" method="post">
        <input type="text" name="username"/><br/>
        <input type="text" name="age"/><br/>
        <input type="text" name="account.money"/><br/>
        <input type="text" name="accounts[0].money"/><br/>
        <input type="text" name="accounts[1].money"/><br/>
        <input type="submit"/>
    </form>
</body>
</html>

2.3 实体类与集合类型的绑定

  • JavaBean:通过nameJavaBean中的属性名匹配进行绑定。如果JavaBean包含其他引用类型,表单字段需要采用对象.属性的方式命名。
  • 集合类型:当表单中包含多个同名参数时,Spring MVC会自动封装成ListMap等集合。

2.4 使用原生ServletAPI对象

除了使用Spring MVC的自动绑定功能外,我们还可以直接使用Servlet API(HttpServletRequestHttpServletResponse等)进行操作:

@RequestMapping(value = "/save6.do", method = RequestMethod.POST)
public String save6(HttpServletRequest request, HttpServletResponse response) {
    String username = request.getParameter("username");
    System.out.println("Username: " + username);
    
    HttpSession session = request.getSession();
    System.out.println(session);
    System.out.println(response);
    
    return "suc";
}

三、不常用的注解

3.1 @RequestParam注解

@RequestParam注解用于将HTTP请求中的指定参数绑定到方法参数中。它常用于请求参数的个别处理,特别是当请求参数的名称与方法参数的名称不一致时。

使用方法
@Controller
@RequestMapping("/dept")
public class DeptController {

    @RequestMapping("/save")
    public String save(@RequestParam(value = "username", required = false) String name) {
        System.out.println("Username: " + name);
        return "suc";
    }
}
  • value:指定请求参数的名称。
  • required:指定该参数是否必须提供,默认值是true,如果未提供,则抛出MissingServletRequestParameterException

3.2 @RequestParam常见用法

  • 指定请求参数名称
@RequestParam("username")
public String saveUser(@RequestParam("username") String username) {
    return "suc";
}
  • 设置默认值
@RequestParam(value = "username", defaultValue = "guest")
public String saveUser(@RequestParam("username") String username) {
    return "suc";
}

结论

        通过@RequestMapping及其相关注解,Spring MVC简化了Web请求的处理过程,使得控制器能够更方便地与请求进行交互。掌握请求参数绑定、@RequestParam的使用方法,以及如何处理表单数据和复杂类型,能帮助我们更高效地开发Web应用。在实际项目中,我们可以根据需求选择合适的注解进行处理,提高开发效率和代码可读性。


http://www.kler.cn/a/531124.html

相关文章:

  • Vue3的el-table-column下拉输入实时查询API数据选择的实现方法
  • Apache Hudi数据湖技术应用在网络打车系统中的系统架构设计、软硬件配置、软件技术栈、具体实现流程和关键代码
  • OSCP - Proving Grounds - Roquefort
  • Ubuntu 下 nginx-1.24.0 源码分析 main函数 — ngx_cdecl 宏
  • SOME/IP--协议英文原文讲解3
  • OpenCV:图像轮廓
  • Android学习19 -- 手搓App
  • The Simulation技术浅析(三):数值方法
  • Hive修复分区
  • 亚博microros小车-原生ubuntu支持系列:20 ROS Robot APP建图
  • 【IocDI】_存储Bean的五大类注解及getBean的使用
  • 独立开发者的技术栈
  • 使用Pygame制作“走迷宫”游戏
  • 54【ip+端口+根目录通信】
  • 【数据分析】案例04:豆瓣电影Top250的数据分析与Web网页可视化(numpy+pandas+matplotlib+flask)
  • 六百六十六,盐豆不带盐了
  • 解决SetWindowCompositionAttribute使控件文本透明的问题
  • git中文件的状态状态切换
  • 全栈开发:使用.NET Core WebAPI构建前后端分离的核心技巧(一)
  • 代码随想录算法训练营Day35
  • Docker 部署教程jenkins
  • 1-刷力扣问题记录
  • 学习并熟练使用MyBatis
  • Unity打包安卓报错sdk version 0.0 < 26.0(亲测解决)
  • 深度解读 Docker Swarm
  • OpenAI 实战进阶教程 - 第七节: 与数据库集成 - 生成 SQL 查询与优化