------------ SpringMVC------
第二章 请求参数的绑定
- 请求参数的说明:表单中的请求参数都是Key=Value,Springmvc获取请求参数的过程就是通过表单提交的请求,作为控制器中方法参数进行绑定的。
- 支持的数据类型
- 基本数据类型参数:包括基本数据类型和 String 类型
- POJO 类型参数:包括实体类,以及实体类的关联类
- 数组和集合类型参数:List、Map、数组
- 【SpringMVC 中参数的绑定是自动实现的,所以,就必须要遵循框架的使用规则】
- 使用规则:
- 如果是基本数据类型或者 String 类型:要求参数的名称和控制器中方法的参数名称完全一致。
- 如果是 POJO 类型,或者它的关联类:要求表单中的参数名称和 POJO 的属性名称一致,并且控制器方法的参数类型是POJO 类型。
-
第一种:要求集合类型的请求参数必须在 POJO 中,在表单中请求参数名称要和 POJO 中的集合属性名称一致。如果是 List 集合的元素赋值,使用下标;如果是 Map 集合中的元素赋值,使用键值对
第二种:接收的请求参数是 JSON 格式数据,需要通过使用注解实现【SpringMVC 框架它可以自动实现一些数据类型的自动转换,内置转换器,在org.springframework.core.convert.support 包下】
- 参数绑定的应用:基本数据类型和String类型。
-
JSP页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>Hello World!</h2>
<a href="app/baseString?id=1001&name=zhangguorong&money=13131.0">基本数据类型和String</a>
</body>
</html>
Controller控制器类:
@Controller //此注解意思就是交给Spring容器来管理
@RequestMapping(value ="/app")
public class HelloWorldController {
@RequestMapping("/baseString")
public String baseString(Integer id,String name,Double money){
System.out.println("id="+id+"\t name="+name+"\t money="+money);
return "success";
}
}
- POJO参数类型的绑定
-
public class User implements Serializable {
private static final long serialVersionUID = 5205810159060376996L;
private Integer id;
private String userName;
private String gender;
private String address;
<h2>POJO参数类型的绑定</h2>
<form action="app/pojoind" method="post">
用户的id:<input type="text" name="id"></br>
用户名:<input type="text" name="userName"></br>
用户性别:<input type="text" name="gender"></br>
用户的地址:<input type="text" name="address"></br>
<input type="submit" value="提交"/>
</form>
@Controller //此注解意思就是交给Spring容器来管理
@RequestMapping(value ="/app")
public class HelloWorldController {
@RequestMapping("/pojoind")
public String Controolerbase(User user){
System.out.println(user);
return "success";
}
}
- 配置 Spring mvc 的编码过滤器
-
<!--配置SpringMVC编码的过滤器-->
<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>
<!--启动过滤器-->
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 准备POJO
-
public class User implements Serializable {
private static final long serialVersionUID = 5205810159060376996L;
private Integer id;
private String userName;
private String gender;
private String address;
private List<String> list;
private Map<String,String> map;
public User(){
}
Jsp页面:
<h2>POJO参数类型的绑定</h2>
<form action="app/pojoind" method="post">
爱好 1:<input type="text" name="list[0]"><br/>
爱好 2:<input type="text" name="list[1]"><br/>
爱好 3:<input type="text" name="list[2]"><br/>
爱好 4:<input type="text" name="list[3]"><br/>
城市 1:<input type="text" name="map['one']"><br/>
城市 2:<input type="text" name="map['two']"><br/>
城市 3:<input type="text" name="map['three']"><br/>
城市 4:<input type="text" name="map['four']"><br/>
<input type="submit" value="提交"/>
</form>
控制器:
@Controller //此注解意思就是交给Spring容器来管理
@RequestMapping(value ="/app")
public class HelloWorldController {
@RequestMapping("/pojoind")
public String Controolerbase(User user){
System.out.println(user);
List<String>list=user.getList();
for(String s:list){
System.out.println(s+"----"+s);
}
System.out.println("========="+user.getMap());
return "success";
}
}
- 自定义类型的转换:
-
例如:date 日期 2020-01-01
定义一个类,实现 Converter 接口
/S 表示接受的类型,T表示目标类型
//自定义类型转换器 把日期 2020-01-01 转换成 Date
public class DateConvert implements Converter<String, Date> {
@Override
public Date convert(String s) {
DateFormat dataFormat=null;
Date date=null;
if(s!=null){
dataFormat=new SimpleDateFormat("yyyy-MM-dd");
try {
date=dataFormat.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
}
return date;
}
}
- 在 springmvc 配置文件中注册自定义类型转换器
-
简单的来说,就是把自己定义的类型转换器,注册到 springmvc 类型转换器的服务中
<!--配置类型转换服务器对象-->
<bean id="conversionServiceFactoryBean" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters" >
<array>
<bean class="com.bdit.convert.DateConvert"></bean>
</array>
</property>
</bean>
- 在<mvc:annotation-driver>标签中引用配置的类型转换器
-
<mvc:annotation-driven conversion-service="conversionServiceFactoryBean"></mvc:annotation-driven>
- 使用ServletAPI
-
SpringMVC 支持原始的 ServletAPI 对象作为控制器中方法的参数
需要导入 Servlet API 的 JAR 包
<!--servlet-api Jar包-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
@Controller //此注解意思就是交给Spring容器来管理
@RequestMapping(value ="/app")
public class HelloWorldController {
@RequestMapping("/Servlet")
public String ServletApl(HttpServletRequest request, HttpServletResponse response){
System.out.println(request.getParameter("name"));
System.out.println(request);
System.out.println(response);
return "success";
}
来源:oschina
链接:https://my.oschina.net/u/4244602/blog/3195823
