目录
请求普通参数
- SpringMvc将传递的参数封装到处理器方法的形参中,达到快速访问参数的目的
- 先来测试一下
<servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring-mvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
<context:component-scan base-package="com.superdemo"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>
- 然后开始试试传参
- 请求参数类型
- 普通类型参数
- POJO类型参数
- 数组类型参数
- 集合类型参数
- 普通类型参数
- 参数名与处理器方法形参名保持一致
- 参数设定
- 名称:@RequestParam
- 类型:形参注解
- 位置:处理器类中的方法形参前方
- 作用:绑定请求参数与对应处理方法形参间的关系
- 范例:
- @RequestMapping ("/requestParam2")
- public String requestParam2(@RequestParam(
- name = "userName", //地址请求参数
- required = true, //是否强制要求填写
- defaultValue = "icpc" //默认值
- )String name){
- System.out.println ("name="+name) ;
- return "page.jsp";}
- 访问路径:/requestParam2/userName=ccpc
@Controller public class UserController { //http://localhost:8080/springmvc_demo4_war/requestParam1?name=icpc //http://localhost:8080/springmvc_demo4_war/requestParam1?name=icpc&age=19 @RequestMapping("/requestParam1") public String requestParam1(String name,int age){ System.out.println(name+","+age); return "page.jsp"; } //http://localhost:8080/springmvc_demo4_war/requestParam2?userName=tj @RequestMapping("/requestParam2") public String requestParam2(@RequestParam("userName")String name){ System.out.println(name); return "page.jsp"; } }
POJO类型参数
- 当POJO中使用简单类型属性时,参数名称与POJO类属性名保持一致
- 参数冲突
- 当POJO类型属性与其他形参出现同名问题时,将被同时赋值
- 建议使用@RequestParam注解进行区分
- 复杂POJO类型参数
- 当POJO中出现对象属性时,参数名称与对象层次结构名称保持一致
- 当POJO中出现集合,保存简单数据,使用多个相同名称的参数为其进行赋值
- 当POJO中出现List,保存对象数据,参数名称与对象层次结构名称保持一致,使用数组格式描述集合中对象的位置
- 当POJO中出现Map,保存对象数据,参数名称与对象层次结构名称保持一致,使用映射格式描述集合中对象的位置
//http://localhost:8080/springmvc_demo4_war/requestParam3?name=tj&age=19 @RequestMapping("/requestParam3") public String requestParam3(User user,int age){ System.out.println("user="+user+",age="+age); return "page.jsp"; } //http://localhost:8080/springmvc_demo4_war/requestParam4?address.city=beijing @RequestMapping("/requestParam4") public String requestParam4(User user){ System.out.println(user.getAddress().getCity()); return "page.jsp"; } //http://localhost:8080/springmvc_demo4_war/requestParam5?nick=icpc&nick=acm&nick=ccpc @RequestMapping("/requestParam5") public String requestParam5(User user){ System.out.println(user); return "page.jsp"; } //http://localhost:8080/springmvc_demo4_war/requestParam6?addresses%5b0%5d.city=beijing&addresses%5b1%5d.province=hebei @RequestMapping("/requestParam6") public String requestParam6(User user){ System.out.println(user.getAddresses()); return "page.jsp"; } //http://localhost:8080/springmvc_demo4_war/requestParam7?addressMap%5b%27job%27%5d.city=beijing&addressMap%5b%27home%27%5d.province=hunan @RequestMapping("/requestParam7") public String requestParam7(User user){ System.out.println(user.getAddressMap()); return "page.jsp"; }
数组类型参数
- 请求参数名与处理器方法形参名保持一致,且请求参数数量>1个
集合类型参数
- 保存简单类型数据,请求参数名与处理器方法形参名保持一致,且请求参数数量>1个
- 注意:springMVC默认将List作为对象处理,赋值前先创建对象,然后将nick作为对象的属性进行处理
- 由于List是接口,无法创建对象,报无法找到构造方法异常;
- 修复类型为可创建对象的ArrayList类型后,对象可以创建,但没有nick属性,因此数据为空
- 此时需要告知springMVC的处理器nick是一组数据,而不是一个单一数据
- 通过@RequestParam注解,将数量大于1个names参数打包成参数数组后,springMVC才能识别该数据格式,并判定形参类型是否为数组或集合,并按数组或集合对象的形式操作数据
类型转换器
- SpringMVC对接收的数据进行自动类型转换,该工作通过Converter接口实现
- 日期类型格式转换(简化版)
- 名称:@DateTimeFormat
- 类型:形参注解、成员变量注解
- 位置:形参前面 或 成员变量上方
- 作用:为当前参数或变量指定类型转换规则
- 注意:
- 需要依赖注解驱动支持
实例
@Controller public class UserController { //http://localhost:8080/springmvc_demo4_war/requestParam1?name=icpc //http://localhost:8080/springmvc_demo4_war/requestParam1?name=icpc&age=19 @RequestMapping("/requestParam1") public String requestParam1(String name,int age){ System.out.println(name+","+age); return "page.jsp"; } //http://localhost:8080/springmvc_demo4_war/requestParam2?userName=tj @RequestMapping("/requestParam2") public String requestParam2(@RequestParam("userName")String name){ System.out.println(name); return "page.jsp"; } //http://localhost:8080/springmvc_demo4_war/requestParam3?name=tj&age=19 @RequestMapping("/requestParam3") public String requestParam3(User user,int age){ System.out.println("user="+user+",age="+age); return "page.jsp"; } //http://localhost:8080/springmvc_demo4_war/requestParam4?address.city=beijing @RequestMapping("/requestParam4") public String requestParam4(User user){ System.out.println(user.getAddress().getCity()); return "page.jsp"; } //http://localhost:8080/springmvc_demo4_war/requestParam5?nick=icpc&nick=acm&nick=ccpc @RequestMapping("/requestParam5") public String requestParam5(User user){ System.out.println(user); return "page.jsp"; } //http://localhost:8080/springmvc_demo4_war/requestParam6?addresses%5b0%5d.city=beijing&addresses%5b1%5d.province=hebei @RequestMapping("/requestParam6") public String requestParam6(User user){ System.out.println(user.getAddresses()); return "page.jsp"; } //http://localhost:8080/springmvc_demo4_war/requestParam7?addressMap%5b%27job%27%5d.city=beijing&addressMap%5b%27home%27%5d.province=hunan @RequestMapping("/requestParam7") public String requestParam7(User user){ System.out.println(user.getAddressMap()); return "page.jsp"; } //http://localhost:8080/springmvc_demo4_war/requestParam8?nick=tj&nick=ccpc @RequestMapping("/requestParam8") public String requestParam8(String[] nick){ System.out.println(nick[0]+","+nick[1]); return "page.jsp"; } //http://localhost:8080/springmvc_demo4_war/requestParam9?nick=king&nick=icpc @RequestMapping("/requestParam9") public String requestParam9(@RequestParam("nick")List<String> nick){ System.out.println(nick); return "page.jsp"; } @RequestMapping("/requestParam10") public String requestParam10(@DateTimeFormat(pattern = "yyyy-MM-dd")Date date){ System.out.println(date); return "page.jsp"; } }
请求映射
- 名称:@RequestMapping
- 类型:方法注解
- 位置:处理器类中的方法定义上方
- 作用:绑定请求地址与对应处理方法间的关系
- 名称:@RequestMapping
- 类型:类注解
- 位置:处理器类定义上方
- 作用:为当前处理器中所有方法设定公共的访问路径前缀
- 请求返回的页面地址默认为当前路径
- 当设置了公共的访问前缀后,当前路径发生了变化,需要根据变化修改地址或修改访问页面的路径
@RequestMapping属性
- 常用属性
- value
- method
- 详细
- @RequestMapping(
- value="/requestURL3",
- //设定请求路径,与path属性、value属性相同
- method = RequestMethod.GET,
- //设定请求方式
- params = "name",
- //设定请求参数条件
- headers = "content-type=text/*",
- //设定请求消息头条件
- consumes = "text/*",
- //用于指定可以接收的请求正文类型(MIME类型)
- produces = "text/*",
- //用于指定可以生成的响应正文类型(MIME类型)
- )
- public String requestURL3(){
- return "/page.jsp";
- }
本文含有隐藏内容,请 开通VIP 后查看