前四种数据注入的方式,会自动进行类型转换。但无法自动转换日期类型。
(1)单个数据(基本数据类型)注入
在方法中声明一个和表单提交的参数名称相同的参数,由框架按照名称直接注入。
(2)对象封装注入
在方法中声明一个自定义的实体类参数,框架调用实体类中相应的setter方法注入属性值,只要保证实体类中成员变量的名称与提交请求的name属性值一致即可。
实体Bean含对象属性
比如:Student对象,其中有一个Address的对象属性,在Address对象中有country和city两个基本类型的属性。
<form action="${pageContext.request.contextPath}/objectParam" method="post"><fieldset><legend>对象数据提交</legend>姓名:<input type="text" name="stuname" /> <br />年龄:<input type="text" name="stuage" /> <br />国家:<input type="text" name="address.country" /> <br />城市:<input type="text" name="address.city" /> <br /><input type="submit" value="提交"></fieldset></form>
(3)动态占位符提交/路径变量(仅用于超链接)
使用框架提供的一个注解@PathVariable,将请求url中的值作为参数进行提取,只能是超链接。restful风格下的数据提取方式。
restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。
它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
RESTful风格是把请求参数变为请求路径的一种编程风格。通过路径变量的使用,可以实现RESTful风格的编程。
中文乱码:
由于tomcat默认使用ISO-8859-1对接收的文本编码,因此要获得正确中文有两种解决方式:
-
自己转码
使用如下转码方式。先把name以ISO-8859-1再编码,还原成字节数组,再用UTF-8进行解码,即可获得正确中文。
String newName=new String(name.getBytes("ISO-8859-1"),"UTF-8");
-
修改tomcat | conf | server.xml
在server.xml的Connect中添加URIEncoding="utf-8",这样默认就是用utf-8解码了,参数绑定中文也可以正确显示:
<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URIEncoding="utf-8"/>
另,web.xml配置的filter只对post请求有效,因此对此问题不是解决之道。
(4)请求参数名称与形参名称不一致
请求与形参中的名字不对应,可以使用
@RequestParam(value="name1",required=true) String namea来进行参数名称绑定。
(5)数组类型的请求参数
@RequestMapping("/arrayParam")
public String arrayParam(String[] hobby){System.out.println("我的爱好:");for(String s:hobby){System.out.println(s);}return "main";
}
(6)使用HttpServletRequest对象提取
在方法参数中声明一个request对象,使用request的getParameter()获取表单提交的数据,这样得到的数据还要手工进行数据类型的转换。
public String five(HttpServletRequest request){int age=new Integer(request.getParameter("stuage"));String name=request.getParameter("stuname");System.out.println(age+"*********"+name);return "main";
}