SpringMVC学习总结一
请求参数获取
SpringMVC可以获取如下类型的参数:
- 基本类型
- 实体类
- 数组类型
- 集合类型
下面讲解如何获取这些类型的请求参数。
基本类型
对于基本类型的参数,当请求参数的名称和Contrller中的业务方法名称一致时会自动映射匹配,无需进行其它的操作。
例:
超链接中的请求参数username和业务方法中参数名称一样,请求参数的值会自动映射到业务方法上。
实体类对象
对于实体类,实体类的属性名和请求的参数名相同时,也会自动映射匹配。
如果实体类中的属性中包含其它的实体类对象,使用实体类对象变量.属性的方式可以自动映射
通过account.name这种写法可以让请求参数和方法中的实体类参数自动映射。
数组
对于数组可以使用 数组名=xxx&数组名=xxx&数组名=xxx的方式进行映射。
集合
可以通过userList[0].username,userList[0].age这种方式使数据自动映射到集合中存储的实体类对象上。
常用注解
@RequestMapping
指定请求映射路径,可以作用于类上和方法上。
@RequestParam
当请求参数的名称和Controller中的业务方法参数名称不一致时,需要通过@RequestParam注解显示绑定参数。
属性:
- value:用于指定请求参数的名称,
- required:是否必须有此请求参数,默认是true,如果此时没有传入会报错;
- defaultValue:当required为false且没有传入请求参数,此时会使用这个默认的值;
@PathVariable
用于在Restful风格的接口中获取请求参数。
属性:
- value:指定参数的名称
- required:参数是否必须
@RequestHeader
用于获取请求头的信息,相当于request.getHeader()方法。
属性
- value:请求头的名称;
- required:是否必须携带此请求头;
输出结果如下:
@CookieValue
获取指定cookie的值。
属性:
- value:指定cookie的名称;
- required:是否必须携带此cookie;
使用方法如下:
输出结果:
@ResponseBody
此注解就是将controller层中方法返回的字符串直接显示到页面上,而不是跳转到指定的页面。
请求跳转路径设置
1、方法中直接返回字符串
这里会跳转到success页面去,success页面位于pages目录下。
2、使用ModelAndView
通过setViewName方法设置跳转到哪个页面去。
@RequestMapping("/test11")
public ModelAndView test11() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("success");
return modelAndView;
}
自定义类型转换器
SpringMVC默认提供了一些类型转换,比如把int转为String,但是有些类型转换并没有提供,需要我们自己去定义类型转换器进行转换,比如将String转为Date,这时服务器会报如下的错误。
Field error in object 'user' on field 'birthday': rejected value [2022-4-23]; codes [typeMismatch.user.birthday,typeMismatch.birthday,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [user.birthday,birthday]; arguments []; default message [birthday]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'birthday'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.util.Date] for value '2022-4-23'; nested exception is java.lang.IllegalArgumentException]]
自定义类型转换器的步骤如下:
- 定义转换器实现Converter接口
/**
* Converter<String, Date>:String是输入的参数类型,Date是转换后的类型
*
*/
public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String source) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = simpleDateFormat.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
- 在SpringMVC的配置文件中声明此转换器;
<!--配置日期类型转换器-->
<bean id="dataConverter" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.sks.converte.DateConverter"/>
</list>
</property>
</bean>
- 在<annotation-driven / >注解中引用转换器;
<mvc:annotation-driven conversion-service="dataConverter"/>