@RequestMapping详解与参数绑定

本文详细介绍了SpringMVC中的@RequestMapping注解的使用,包括value、method、params和headers属性的解释。同时,文章阐述了请求参数的绑定机制,如基本数据类型、字符串、JavaBean及集合数据类型的绑定规则,并提供了处理请求参数中文乱码的解决方案。以实际的Account和User类为例,展示了如何通过表单提交参数并进行参数绑定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@RequestMapping详解

属性:
  1、value:用于指定请求的URL,它和path属性的作用是一样的。

@AliasFor("path")
String[] value() default {};

@AliasFor("value")
String[] path() default {};

  2、method:指接受到的请求方式。

RequestMethod[] method() default {};

  3、params:用于指定限制请求参数的条件,它支持简单的表达式,要求请求参数的key和value必须和配置中的一样的。例如:

params={"acccountName"},表示请求参数必须有accountName
params={"money!100"},表示请求参数中money不能是100@RequestMapping(value = "/testRequestMapping",params = {"username"})

  4、headers:发送的请求中必须包含请求头。
以上四个属性指要出现两个以上,就是与关系。

请求参数的绑定

1. 请求参数的绑定说明
  1.1 绑定机制
    表单提交的数据都是k=v格式的,比如:username=haha&password=123
    SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的
    要求:提交表单的name和参数的名称是相同的。比如:在方法的映射中参数为username,那么在消息请求中必须为一个username的k-v传入

@RequestMapping(value = "/testRequestMapping",params = {"username"})

  1.2 支持的数据类型
    基本数据类型和字符串类型
    实体类型(JavaBean)
    集合数据类型(List、Map集合等)
2. 基本数据类型和字符串类型
  提交表单的name和参数的名称是相同的
  区分大小写
3. 实体类型(Java Bean)
  提交表单的name和JavaBean中的属性名称需要一致
  如果一个JavaBean类中包含其他的引用类型,那么表单的name属性需要编写出:对象.属性 例如:address.name
4. 给集合属性数据封装
  Jsp页面编写方式:list[0].属性
5. 请求参数中文乱码的解决
  在web.xml中配置Spring提供的过滤器类

现在考虑两个类Account和User,我想要通过表单提交参数,从而将控制器中的参数绑定。

public class Account implements Serializable {

    private String username;
    private String password;
    private Double money;
    private User user;
}

public class User implements Serializable {
    private String uName;
    private int age;
}

我们编写一个控制器类,来绑定Account参数:

public String saveAccount(Account account){
        System.out.println("执行了。。。");
        System.out.println(account);
        return "success";
}

在请求的jsp文件这样定义

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--
    <a href="param/testParam?username=hehe">请求参数绑定</a>
    --%>
    <form action="param/saveAccount" method="post">
        姓名: <input type="text" name="username" /><br/>
        密码: <input type="text" name="password" /><br/>
        金额: <input type="text" name="money" /><br/>
        用户姓名: <input type="text" name="user.uName" /><br/>
        用户年龄: <input type="text" name="user.age" /><br/>
        <input type="submit" value="提交">

    </form>
</body>
</html>

执行如下所示:
在这里插入图片描述
结果如下所示:
在这里插入图片描述
请求参数中文乱码的解决

  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

在这里插入图片描述
将数据封装到集合对象中

	private String username;
    private String password;
    private Double money;
    List<User> list;
    Map<String,User> map;
<form action="param/saveAccount" method="post">
    姓名: <input type="text" name="username" /><br/>
    密码: <input type="text" name="password" /><br/>
    金额: <input type="text" name="money" /><br/>

    用户姓名: <input type="text" name="list[0].uName" /><br/>
    用户年龄: <input type="text" name="list[0].age" /><br/>

    用户姓名: <input type="text" name="map['one'].uName" /><br/>
    用户年龄: <input type="text" name="map['one'].age" /><br/>
    <input type="submit" value="提交">

</form>

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值