SpringMVC-请求

发布于:2022-11-01 ⋅ 阅读:(440) ⋅ 点赞:(0)

目录

请求普通参数

POJO类型参数

数组类型参数

集合类型参数

类型转换器

实例

请求映射

@RequestMapping属性


  • 请求普通参数

  • 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 后查看

网站公告

今日签到

点亮在社区的每一天
去签到