【学习笔记】SpringMVC处理请求数据

110 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情

SpringMVC处理请求数据

使用Servlet处理请求数据

  1. 获取请求参数

    • String param = request.getParameter();
  2. 获取请求头

    • request.getHeader();
  3. 获取Cookie

    • request.getCookies();

处理请求参数

  • 默认情况:可以将请求参数名与入参参数名一致,会自动入参和进行类型转换。
@RequestMapping("/requestParam01")
    public String requestParam01 (String stuname){
        System.out.println("stuname = " + stuname);
        return SUCCESS;
    }
<h1>处理请求参数</h1>
<a th:href="@{/requestParam01(stuname='zs')}">测试处理请求参数</a>
  • @RequestParam注解

    • 作用:如请求参数与入参参数名不一致时,可以使用@RequestParam注解设置入参参数名

    • 属性

      • value/name

        • 类型:String
        • 作用:设置需要入参的参数名
      • required

        • 类型:Boolean

        • 作用:设置当前参数,是否必须入参

          • true:表示当前参数必须入参,如未入参会报如下错误

            • 400【Required String parameter 'sName' is not present】
          • false:表示当前参数不必须入参,如未入参,装配null值

      • defaultValue

        • 类型:String
        • 作用:当装配数值为null时,指定当前defaultValue默认值
    • 示例代码

      <h1>处理请求参数</h1>
      <a th:href="@{/requestParam01(sName='zs')}">测试处理请求参数</a>
      
      /*
          获取请求参数
           */
          @RequestMapping("/requestParam01")
          public String requestParam01 (@RequestParam(value = "sName")String stuname, @RequestParam(value = "sId",required = false,defaultValue = "1234")Integer stuId){
              System.out.println("stuname = " + stuname);
              System.out.println("stuId = " + stuId);
              return SUCCESS;
          }
      
  • SpringMVC支持POJO入参

    • 要求:请求参数名与POJO中的属性名保持一致

    • 示例代码

      <form th:action="@{/saveEmp}" method="POST">
          id:<input type="text" name="id"><br>
          LastName:<input type="text" name="lastName"><br>
          Email:<input type="text" name="email"><br>
          Salary:<input type="text" name="salary"><br>
          <input type="submit" value="添加员工信息">
      </form>
      
      /**
       * 获取请求参数POJO
       */
      @RequestMapping(value = "/saveEmp",method = RequestMethod.POST)
      public String saveEmp(Employee employee){
          System.out.println("employee = " + employee);
          return  SUCCESS;
      }
      

处理请求头

  • 语法: @RequestHeader注解

  • 属性

    • value/name

      • 类型:String
      • 作用:设置需要获取请求头名称
    • required

      • 类型:boolean

      • 作用:【默认值true】

        • true:设置当前请求头是否为必须入参,如未入参会报如下错误

          • 400【Required String parameter 'sName' is not present】
        • false:表示当前参数不必须入参,如未入参,装配null值

    • defaultValue

      • 类型:String
      • 作用:当装配数值为null时,指定当前defaultValue默认值
  • 示例代码

    <a th:href="@{/testGetHeader}">测试获取请求头</a>
    
    /**
     * 获取请求头
     * @return
     */
    @RequestMapping(value = "/testGetHeader")
    public String testGetHeader(@RequestHeader("Accept-Language")String al,
                                @RequestHeader("Referer") String ref){
        System.out.println("al = " + al);
        System.out.println("ref = " + ref);
        return SUCCESS;
    }
    

处理Cookie信息

服务器创建session时会创建一个特殊的cookie:JSESSIONID

  • 语法: @CookieValue获取Cookie数值

  • 属性

    • value/name

      • 类型:String
      • 作用:设置需要获取Cookie名称
    • required

      • 类型:boolean

      • 作用:【默认值true】

        • true:设置当前Cookie是否为必须入参,如未入参会报如下错误

          • 400【Required String parameter 'sName' is not present】
        • false:表示当前Cookie不必须入参,如未入参,装配null值

    • defaultValue

      • 类型:String
      • 作用:当装配数值为null时,指定当前defaultValue默认值
  • 示例代码

    <a th:href="@{/setCookie}">设置Cookie信息</a><br>
    <a th:href="@{/getCookie}">获取Cookie信息</a><br>
    
    /**
         * 设置Cookie
         * @return
         */
        @RequestMapping("/setCookie")
        public String setCookie(HttpSession session){
    //        Cookie cookie = new Cookie();
            System.out.println("session.getId() = " + session.getId());
            return SUCCESS;
        }
    ​
        /**
         * 获取Cookie
         * @return
         */
        @RequestMapping("/getCookie")
        public String getCookie(@CookieValue("JSESSIONID")String cookieValue){
            System.out.println("cookieValue = " + cookieValue);
            return SUCCESS;
        }
    

使用原生Servlet-API入参

  • 将原生Servlet相关对象入参即可。之后调用相应方法。
  <h1>使用原生Servlet-API</h1>
  <a th:href="@{/servlet}">获取request信息</a><br>
/*
    使用原生API,request入参
     */
    @RequestMapping("/servlet")
    public String servlet(HttpServletRequest request){
        //获取Servlet上下文
        ServletContext servletContext = request.getServletContext();
        //获取文件真实路径
        String realPath = servletContext.getRealPath("/webapp/WEB-INF/pages/index.html");
        System.out.println("realPath = " + realPath);
        return SUCCESS;
    }

\