zoukankan      html  css  js  c++  java
  • 请求数据传入(SpringMVC)

    1.    请求处理方法签名

     Spring MVC 通过分析处理方法的签名,HTTP请求信息绑定到处理方法的相应人参中。

     Spring MVC 对控制器处理方法签名的限制是很宽松的,几乎可以按喜欢的任何方式对方法进行签名。

      必要时可以对方法及方法入参标注相应的注解( @PathVariable 、@RequestParam、@RequestHeader 等)、

     Spring MVC 框架会将 HTTP 请求的信息绑定到相应的方法入参中,并根据方法的返回值类型做出相应的后续处理。

    ①    RequestMapping_请求参数&请求头【了解】

    //了解: 可以使用 params 和 headers 来更加精确的映射请求. params 和 headers 支持简单的表达式.
    @RequestMapping(value="/testParamsAndHeaders",
    params= {"username","age!=10"}, headers = { "Accept-Language=en-US,zh;q=0.8" })
    public String testParamsAndHeaders(){
    System.out.println("testParamsAndHeaders...");
    return "success";
    }
        <a href="springmvc/testParamsAndHeaders?username=atguigu&age=15">testParamsAndHeaders</a>

    2.    @RequestParam注解(把请求参数传递给请求方法)

    • 在处理方法入参处使用 @RequestParam 可以把请求参数传递给请求方法(<form>)
    •  value:参数名
    • required:是否必须。默认为 true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常
    •  defaultValue: 默认值,当没有传递参数时使用该值
        /**
         * @PathVariable是必须带的,没有required=false可以设置
         * @ModelAttribute放在方法前会在每个方法前执行,如果不存在占位符{id},就会报错
         * 所以使用@RequestParam,设置required=false,同时提交的表格需要添加该参数
         * @param id
         * @param model
         */
        @ModelAttribute
        public void getEmployee(@RequestParam(value="id",required=false)Integer id,Model model){
            Employee employee = employeeDao.get(id);
            if(employee != null)
                model.addAttribute("employee", employee);
            System.out.println("查出的员工:"+employee);
        }

    3.    @RequestHeader 注解

    •  使用 @RequestHeader 绑定请求报头的属性值
    • 请求头包含了若干个属性,服务器可据此获知客户端的信息,通过 @RequestHeader 即可将请求头中的属性值绑定到处理方法的入参中
    //了解: 映射请求头信息 用法同 @RequestParam
    @RequestMapping(value="/testRequestHeader")
    public String testRequestHeader(@RequestHeader(value="Accept-Language") String al){
    System.out.println("testRequestHeader - Accept-Language:"+al);
    return "success";
    }
    <!-- 测试 请求头@RequestHeader 注解使用 -->
    <a href="springmvc/testRequestHeader">testRequestHeader</a>

    4.    @CookieValue 注解

     使用 @CookieValue 绑定请求中的 Cookie 值

      @CookieValue 可让处理方法入参绑定某个 Cookie 值

    5.    使用POJO作为参数

    使用 POJO 对象绑定请求参数值

     Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值支持级联属性。如:dept.deptId、dept.address.tel 等

    6.    使用Servlet原生API作为参数

    MVC 的 Handler 方法可以接受哪些 ServletAPI 类型的参数

    /**
     * 可以使用 Serlvet 原生的 API 作为目标方法的参数 具体支持以下类型
     * 
     * HttpServletRequest 
     * HttpServletResponse 
     * HttpSession
     * java.security.Principal 
     * Locale InputStream 
     * OutputStream 
     * Reader 
     * Writer
     * @throws IOException 
     */
    @RequestMapping("/testServletAPI")
    public void testServletAPI(HttpServletRequest request,HttpServletResponse response, Writer out) throws IOException {
    System.out.println("testServletAPI, " + request + ", " + response);
    out.write("hello springmvc");
    //return "success";
    }
    <!-- 测试 Servlet API 作为处理请求参数 -->
    <a href="springmvc/testServletAPI">testServletAPI</a>

    7.    RequestMapping映射请求占位符PathVariable注解

    @PathVariable  映射 URL 绑定的占位符

    带占位符的 URL 是 Spring3.0 新增的功能,该功能在 SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义

    通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中

    URL 中的 {xxx} 占位符可以通过 @PathVariable("xxx") 绑定到操作方法的入参中。

    //@PathVariable 注解可以将请求URL路径中的请求参数,传递到处理请求方法的入参中
    @RequestMapping(value="/testPathVariable/{id}")
    public String testPathVariable(@PathVariable("id") Integer id){
    System.out.println("testPathVariable...id="+id);
    return "success";
    }
    //②	请求链接
    <!-- 测试 @PathVariable -->
    <a href="springmvc/testPathVariable/1">testPathVariable</a>
    

      总结:从目前情况来看@PathVariable、@RequestParam这两个用得比较多,当然还有@ModelAttribute(这个在另外的随笔进行了描写)

  • 相关阅读:
    VSCode编写 Vue 项目标签内显示写CSS提示设置
    Vue 炫酷 Echarts 图表
    vue 动态生成拓扑图
    Vue 全局 websocket
    Vue 自定义组件v-model父子组件传值双向绑定
    vue项目Echarts更新数据是数据表展示错版
    Vue图片加载错误、图片加载失败的处理
    Vue 使用 Ant-d 简单实现左侧菜单栏和面包屑功能
    Vue Echarts图表dataZoom缩放区域根据数据量显示
    Echarts图例数据太多实现滚动效果
  • 原文地址:https://www.cnblogs.com/limingxian537423/p/7274443.html
Copyright © 2011-2022 走看看