Http协议----SpringMVC接收HTTP请求参数,参数绑定总结

本文参考总结文章
参数绑定总结

1.接收请求参数总结,Spring MVC能够获取HTTP请求参数的位置应该有四个:

 以下参数都可以在`HttpServletRequest`对象中获取。
  1. 获取请求行request-URL中的path参数或者query参数

    //如这条请求行:GET http://localhost:8080/test/param1?name=jhp&age=22; 
    request.getMethod(); // GET 
    request.getRequestURL(); //http://localhost:8080/test/param1
    request.getRequestURI(); //test/param1
    request.getQueryString(); //获取query参数, name=jhp&age=22
    
  2. 获取请求头(headers)中的请求头参数

    //如这条普通的请求,下面展示HTTP协议的一部分:
    GET http://localhost:8080/test HTTP/1.1
    host: 101.43.143.8
    request.getHeader("host");	//localhost:8080
    request.getHeader("accept-encoding");	//gzip, deflate, br
    
  3. 获取请求体(RequestBody)中的请求体参数
    3.1 HTTP协议中除了POST和PUT方法具有请求体以外,其它方法都没有请求体。
    因为请求体可以承载复杂的参数传递,所以请求体的数据类型有多种分类,常用的三种:

    1. application/x-www-form-urlencoded
    2. application/json
    3. multipart/form-data
      他们都适用于简单或复杂文本数据的传递,可如果参数中包含文件,则必须使用第三种form-data格式。
    private static final String savePath = "/Users/jihaipeng/IdeaProjects/SGBlog/sangeng-blog/src/main/resources/";
    
    //multipart/form-data
    @PostMapping("/getFile")
    public String getFile(@RequestBody MultipartFile file, String saveName) {
        //这里的路径需要一直到保存的文件名。
        File dest = new File(savePath + saveName);
        try {
            file.transferTo(dest);
            return "return in try" + file.getName();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
        	//在这里返回。try里返回无效
            return "return in finally" + file.getOriginalFilename();
        }
    }
    
  4. 获取cookies中的参数,其本质也是请求头传参

    	/*
        请求报文:
    
    	GET /user/zhangsan/12 HTTP/1.1
    	Host: localhost:8080
    	Cookie: JSESSIONID=3jd6f92h47syx64h58f2nduyso1nz63a; id=12345678
    	这里的Cookie是请求首部字段:服务器接收该Cookie中的信息。
    	Cookie字段的值是一串由分号分割的键值对。
    	Cookie的初始化由服务器完成并添加在响应首部, SetCookie.《图解HTTP》 Page 135.
    */
    
  5. 注意点以及同名参数注入情况总结

    1. @RequestParam与不加注解都可以把请求参数中的值注入到函数形参中。区别在于@RequestParam是严格根据名称匹配注入的,系统不会自动把值注入对象中的字段。不加注解会自动解析对象中的参数。如以下情况
      // http://localhost:8080/test?name=jhp&age=20
      @GetMapping("/test")
      //这里如果加@RequestParam没法根据名称注入参数,系统不会自动把值注入对象中的字段。
      public String test(User user);	
      
    2. 同名参数注入情况
      1. 请求参数(RequestParam)和请求体(RequestBody)中同时存在同名函数
      2. 其他懒得记了。记住各参数不要同名就行

2.参数绑定总结

把Http请求中的参数绑定到方法形参用到的类以及注解如下。
1. 不使用任何注解或类:绑定RequestParam中对应名称的参数/也可以绑定请求体(Content-type:)以x-www-form-urlencodedform-data格式发送的数据。
2. HttpServletRequest:自动绑定该类对象,使用HttpServletRequest手动获取参数。
3. @PathVariable:绑定路径中的参数
4. @RequestParam:绑定查询参数(query)或请求体中(Content-type: application/form-data; application/x-www-urlencoded)的参数。
5. @RequestHeader:绑定请求头中的参数
6. @RequestBody:绑定请求体中的参数.主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据).
请求首部中Content-type应为 application/json.不能是application/form-dataapplication/x-www-form-urlencoded
8. @CookieValue:绑定cookie中的参数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值