@requestMapping
1、@requestMapping
可以作用在类上,表示这个类下都是这个路径下的子路径
好处:比如这个类是对用户的操作,以/user作用在类上,下面是对应的/add,/update 等等,便于管理和明确,清晰。
2、method属性:指定是用什么方法来请求
超链接是使用GET请求的,如果这里指定用POST请求才能执行这个方法的话,那么点击超链接,虽然请求映射是没问题,但是请求的方式不合法,是跳转不过去的
3、params(用的少)
用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的 key 和 value 必须和配置的一模一样。
比如:
这样在发送请求时,必须要传递name这个参数,否则这个方法不执行
如果params里面的value是 name=hehe,如果传过来的参数是name=xixi,就也不行,必须是一模一样的
4、headers(用的少)
用于指定限制请求消息头的条件,如果有具体的值,也必须是一模一样的
表示请求的头中,必须有Accept这个属性,不然莫得访问。
二、参数绑定
1、简单绑定
springMVC会根据传递过来的参数,和方法的形参对应的接收并绑定
表单中请求参数都是基于 key=value 的。SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的。
比如:
其中,形参和传递过来的参数必须一一对应,一模一样(顺序可以不一样),如果方法中,将形参 String username
和Integer age
调换位置,改password
为pass
,再打印,发现username和age可以正常打印(说明调换位置不影响参数绑定),但是pass变成了null,说明无法绑定。
2、实体类绑定
前置:
(1)配置编码转换过滤器
get请求输入中文是不会乱码的,post请求输入中文就会乱码,所以我们要对每个请求都设置UTF-8编码。在以前的servlet中,我们是在每个servlet开始都写上request.setcharacterencoding
,现在不用了,科技进步了,直接在web.xml里面配置filter就完事了
<!--配置编码转换过滤器-->
<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>
(2)编写自定义类型转换器(此处为String转Date)
由于默认的String转Date只能是yyyy/mm/dd形式的,如果输入yyyy-mm-dd就会出现异常,我们现在想变成yyyy-mm-dd,就得自己自定义一个类,注册到springmvc的转换器中
package com.ssn.utils;
import org.springframework.core.convert.converter.Converter;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
//实现Converter接口,接收类型为String,返回类型为Converter
public class StringToDate implements Converter<String, Date> {
@Override
public Date convert(String s) {
if (s == null) throw new RuntimeException("没有输入");
DateFormat df = new SimpleDateFormat("yyyy-mm-dd");
try {
Date result = df.parse(s);
return result;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
springmvc.xml中进行注册
这样一来,我们原本的yyyy/mm/dd格式就失效,变为yyyy-mm-dd格式了。
为了测试各种数据类型绑定,我们写一个Account和User两个实体类, 并在Account类中引用User对象,以及一个List和一个Map,并生成各自的get和set和toString方法
编写一个新的类,用来测试参数绑定是否成功
这里值得注意的是,我们可以直接在形参上写Account类,表示接收过来的参数被封装到一个Account类里面,然后所需要的数据直接通过调用对象的tostrng方法就可以把信息全部打印出来。(否则得写多少个形参啊,麻烦死了,这样就很方便)
index.jsp,通过表单提交内容
因为绑定的是account类,所以通过user这个对象来获取username,进而绑定account对象里面user实体类的姓名(pojo写法)
注意的是list和map的写法,map里面填的是key,即绑定的是这个key的value
多说无益,run一把试试!
填入的日期格式,成功的自定义转换了
list和map也成功绑定了