@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>