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应用。在实际项目中,我们可以根据需求选择合适的注解进行处理,提高开发效率和代码可读性。

相关推荐
yuren_xia20 分钟前
Spring MVC中自定义日期类型格式转换器
java·spring·mvc
名字不要太长 像我这样就好3 小时前
【iOS】OC源码阅读——alloc源码分析
笔记·学习·macos·ios·objective-c
conkl4 小时前
如何初入学习编程包含学习流程图
学习·流程图
FAREWELL000758 小时前
C#进阶学习(十六)C#中的迭代器
开发语言·学习·c#·迭代器模式·迭代器
DXM05218 小时前
牟乃夏《ArcGIS Engine地理信息系统开发教程》学习笔记3-地图基本操作与实战案例
开发语言·笔记·学习·arcgis·c#·ae·arcgis engine
qsmyhsgcs10 小时前
Java程序员转人工智能入门学习路线图(2025版)
java·人工智能·学习·机器学习·算法工程师·人工智能入门·ai算法工程师
Humbunklung10 小时前
PySide6 GUI 学习笔记——常用类及控件使用方法(常用类矩阵QRectF)
笔记·python·学习·pyqt
pjx98710 小时前
质量的“试金石”:精通Spring Boot单元测试与集成测试
spring boot·spring·单元测试·集成测试
幼儿园口算大王10 小时前
Spring反射机制
java·spring·反射
每次的天空11 小时前
Android学习总结之Java篇(一)
android·java·学习