Springmvc参数绑定
第1章 Springmvc参数绑定
1.1 概述
1.1.1 注解介绍:
@RequestParam(value="id",defaultValue="1",required = true)用于映射路径的参数
Value:代表参数名
defaultValue:用于设置参数的默认值,如果参数值为空,就会传入这个默认值
required:表示规定这个参数必须有这个参数
1.1.2 Handler(Controller中的方法)参数列表中默认能接收的参数类型
HttpServletRequest、 HttpServletResponse 、HttpSession、Model/ModelMap
1.2 绑定简单的数据类型参数
支持的数据类型:
参数类型推荐使用包装数据类型,因为基础数据类型不可以为null
整形:Integer、int
字符串:String
单精度:Float、float
双精度:Double、double
布尔型:Boolean、boolean
说明:对于布尔类型的参数,请求的参数值为true或false。
处理器方法:
public String editItem(Model model,Integer id,Boolean status) throws Exception
请求url:
http://localhost:8080/xxx.action?id=2&status=false
@RequestMapping("/itemEdit") public String editItem(@RequestParam(value="id",defaultValue="1",required = true)Integer ids, Model model) { Items items = itemService.getItemById(ids); //把数据传递给页面 model.addAttribute("item", items); //返回逻辑视图 return "editItem"; } |
也可以直接在参数列表中直接写,只要参数的名字和请求中传递的参数名一致就能接收
1.3 绑定pojo数据类型的参数
代码:
@RequestMapping("/updateitem") public String updateItem(Items items) { itemService.updateItem(items); //返回成功页面 return "success"; } |
注意:提交的表单中不要有日期类型的数据,否则会报400错误。如果想提交日期类型的数据需要用到后面的自定义参数绑定的内容
1.4 (自定义参数绑定)解决提交表单时日期转换类型
分析:
因为日期传递过来的是String类型,所以会出现类型转换错误
需要编写一个工具类,将字符串转换Date方法
package cn.peihua.springmvc.utils;
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date;
public class DateConverter implements Converter<String,Date> {
@Override public Date convert(String source) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { return simpleDateFormat.parse(source); } catch (ParseException e) { e.printStackTrace(); } return null; } } |
然后在springmvc.xml中进行配置
配置日期转换器的bean
<!--配置日期转换器--> <bean id = "formattingConversionService" class = "org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <set> <bean class = "cn.peihua.springmvc.utils.DateConverter"></bean> </set> </property> </bean> |
然后在注解驱动注册中加入
<!-- 配置注解驱动,如果配置此标签相当于配置了处理器映射器和适配器 --> <mvc:annotation-driven conversion-service="formattingConversionService"/> |
1.5 解决post乱码问题
在web.xml中加入
<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> |
以上可以解决post请求乱码问题。
对于get请求中文参数出现乱码解决方法有两个:
修改tomcat配置文件添加编码与工程编码一致,如下:
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
另外一种方法对参数进行重新编码:
String userName new
String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")
ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码
1.6 绑定pojo包装类
定义一个包装的pojo类
package cn.peihua.springmvc.pojo;
public class QueryVo {
private Items items;
public Items getItems() { return items; }
public void setItems(Items items) { this.items = items; }
}
|
编写controlle层handler,直接将QueryVo 写在参数列表上即可
@RequestMapping("/queryitem") public String queryItem(QueryVo queryVo) { //打印绑定结果 System.out.println(queryVo.getItems().getName()); System.out.println(queryVo.getItems().getPrice());
return null; } |
在页面中传递参数需要在属性.属性的方式进行传递