SpringMvc学习笔记-请求

请求

设置请求映射路径

  • 设置请求路径前缀:类上面配置模块的请求映射与方法请求映射结合形成完整映射路径。

    • 完整映射路径:类注解 + 方法注解

    • @Controller
      @RequestMapping("/user")//请求映射路径前缀
      public class UserController {
          
          @RequestMapping("/save")//具体路径映射
          @ResponseBody
          public String save(){
              System.out.println("user save ...");
              return "{'module':'user save'}";
          }
          
          @RequestMapping("/delete")//具体路径映射
          @ResponseBody
          public String delete(){
              System.out.println("user delete ...");
              return "{'module':'user delete'}";
          }
      }
      

get请求与post请求发送普通参数

  • 发送get请求

    • 在这里插入图片描述
  • 接收get普通参数

    • //普通参数:请求参数与形参名称对应即可完成参数传递
      @RequestMapping("/commonParam")
      @ResponseBody
      public String commonParam(String name,int age){
          System.out.println("普通参数传递 name ==> "+name);
          System.out.println("普通参数传递 age ==> "+age);
          return "{'module':'common param'}";
      }
      
  • 发送post请求

    • 在这里插入图片描述
  • 接受post普通参数

    • //普通参数:请求参数与形参名称对应即可完成参数传递
      @RequestMapping("/commonParam")
      @ResponseBody
      public String commonParam(String name,int age){
          System.out.println("普通参数传递 name ==> "+name);
          System.out.println("普通参数传递 age ==> "+age);
          return "{'module':'common param'}";
      }
      
  • post请求参数汉字乱码问题

    • 解决:在web服务器配置文件中重写过滤器

      • public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
            protected Class<?>[] getRootConfigClasses() {
                return new Class[0];
            }
        
            protected Class<?>[] getServletConfigClasses() {
                return new Class[]{SpringMvcConfig.class};
            }
        
            protected String[] getServletMappings() {
                return new String[]{"/"};
            }
        
            //汉字乱码处理
            @Override
            protected Filter[] getServletFilters() {
                CharacterEncodingFilter filter = new CharacterEncodingFilter();
                filter.setEncoding("utf-8");
                return new Filter[]{filter};
            }
        }
        

5种类型参数传递

  • 普通参数:请求参数名与形参名不同

    • 在这里插入图片描述

    • //普通参数:请求参数名与形参名不同时,使用@RequestParam为请求参数起别名
      @RequestMapping("/commonParamDifferentName")
      @ResponseBody
      public String commonParamDifferentName(@RequestParam("name") String userName , int age){
          System.out.println("普通参数传递 userName ==> "+userName);
          System.out.println("普通参数传递 age ==> "+age);
          return "{'module':'common param different name'}";
      }
      
  • pojo参数:要求请求属性名与实体类属性名相同

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l74gvd20-1667547772388)(C:\Users\57894\AppData\Roaming\Typora\typora-user-images\image-20221101082532657.png)]

    • //POJO参数:请求参数与形参对象中的属性对应即可完成参数传递
      @RequestMapping("/pojoParam")
      @ResponseBody
      public String pojoParam(User user){
          System.out.println("pojo参数传递 user ==> "+user);
          return "{'module':'pojo param'}";
      }
      
  • pojo参数嵌套pojo数据:

    • 在这里插入图片描述

    • //嵌套POJO参数:嵌套属性按照层次结构设定名称即可完成参数传递
      @RequestMapping("/pojoContainPojoParam")
      @ResponseBody
      public String pojoContainPojoParam(User user){
          System.out.println("pojo嵌套pojo参数传递 user ==> "+user);
          return "{'module':'pojo contain pojo param'}";
      }
      
    • 在这里插入图片描述

  • 数组参数:

    • 在这里插入图片描述

    • //数组参数:同名请求参数可以直接映射到对应名称的形参数组对象中
      @RequestMapping("/arrayParam")
      @ResponseBody
      public String arrayParam(String[] likes){
          System.out.println("数组参数传递 likes ==> "+ Arrays.toString(likes));
          return "{'module':'array param'}";
      }
      
  • 集合参数:集合参数前添加@RequestParam让list不被识别成pojo实体类

    • 在这里插入图片描述

    • //集合参数:同名请求参数可以使用@RequestParam注解映射到对应名称的集合对象中作为数据
      @RequestMapping("/listParam")
      @ResponseBody
      //集合参数前需要添加@RequestBody
      public String listParam(@RequestParam List<String> likes){
          System.out.println("集合参数传递 likes ==> "+ likes);
          return "{'module':'list param'}";
      }
      

请求参数传递JSON数据

  • 导入json坐标:

    • <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.0</version>
      </dependency>
      
  • 开启json数据格式的自动转换:@EnableWebMvc

    • @Configuration
      @ComponentScan("com.itheima.controller")
      @EnableWebMvc//开启json数据类型自动转换
      public class SpringMvcConfig {
      }
      
  • json-普通集合参数:@RequestBody注解将外部传递的json数组数据映射到形参的保存实体类的集合对象中,要求属性名对应。

    • 在这里插入图片描述

    • //集合参数:json格式
      @RequestMapping("/listPojoParamForJson")
      @ResponseBody
      public String listPojoParamForJson(@RequestBody List<User> list){
          System.out.println("list pojo(json)参数传递 list ==> "+list);
          return "{'module':'list pojo for json param'}";
      }
      
  • json-pojo参数:@RequestBody注解将外部传递的json数组数据映射到形参的保存实体类的集合对象中,要求属性名对应。

    • 在这里插入图片描述

    • //POJO参数:json格式
      @RequestMapping("/pojoParamForJson")
      @ResponseBody
      public String pojoParamForJson(@RequestBody User user){
          System.out.println("pojo(json)参数传递 user ==> "+user);
          return "{'module':'pojo for json param'}";
      }
      
  • json-pojo集合参数:

    • 在这里插入图片描述

    • //集合参数:json格式
      @RequestMapping("/listPojoParamForJson")
      @ResponseBody
      public String listPojoParamForJson(@RequestBody List<User> list){
          System.out.println("list pojo(json)参数传递 list ==> "+list);
          return "{'module':'list pojo for json param'}";
      }
      

日期型参数传递

  • 在这里插入图片描述

  • //日期参数
    //使用@DateTimeFormat注解设置日期类型数据格式,默认格式yyyy/MM/dd
    @RequestMapping("/dataParam")
    @ResponseBody
    public String dataParam(Date date,
                            @DateTimeFormat(pattern="yyyy-MM-dd") Date date1,
                            @DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") Date date2){
        //@DateTimeFormat:用于设定传递日期参数的格式。
        System.out.println("参数传递 date ==> "+date);
        System.out.println("参数传递 date1(yyyy-MM-dd) ==> "+date1);
        System.out.println("参数传递 date2(yyyy/MM/dd HH:mm:ss) ==> "+date2);
        return "{'module':'data param'}";
    }
    
  • Converter接口:类型转换器

    • 在这里插入图片描述

    • 请求参数年龄数据(String->Integer)

    • 日期格式转换(String->Date)

  • @EnableWebMvc功能之一:根据类型匹配对应的类型转换器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值