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

前言

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

一、@RequestMapping注解的使用

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

1.1 作用与基本使用

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

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

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

java 复制代码
@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:指定请求参数,当请求包含特定参数时,才会匹配该方法。
java 复制代码
@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
java 复制代码
@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 复制代码
<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等)进行操作:

java 复制代码
@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请求中的指定参数绑定到方法参数中。它常用于请求参数的个别处理,特别是当请求参数的名称与方法参数的名称不一致时。

使用方法
java 复制代码
@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常见用法

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

结论

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

相关推荐
2501_9032386531 分钟前
自定义登录页面的Spring Security实践
java·后端·spring·个人开发
飞翔的佩奇1 小时前
Java项目: 基于SpringBoot+mybatis+maven+mysql实现的图书管理系统(含源码+数据库+答辩PPT+毕业论文)
java·数据库·spring boot·mysql·spring·毕业设计·图书管理
字节全栈_kYu2 小时前
微信小程序视频点播在线视频学习系统 毕业设计 课程设计(1)首页_微信小程序视频功能设计流程图
学习·微信小程序·课程设计
想拿高薪的韭菜2 小时前
人工智能第2章-知识点与学习笔记
人工智能·笔记·学习
Future_yzx3 小时前
Java Web的发展史与SpringMVC入门学习(SpringMVC框架入门案例)
java·前端·学习
小菜鸟博士4 小时前
手撕Vision Transformer -- Day1 -- 基础原理
人工智能·深度学习·学习·算法·面试
Bluesonli5 小时前
UE5 蓝图学习计划 - Day 6:角色蓝图
学习·ue5·unreal engine
Bluesonli6 小时前
第 2 天:创建你的第一个 UE5 C++ 项目!
c++·学习·ue5·虚幻·虚幻引擎·unreal engine
前端达人6 小时前
「AI学习笔记」深度学习进化史:从神经网络到“黑箱技术”(三)
人工智能·笔记·深度学习·神经网络·学习