Controller接收参数的方式


目录

  • Controller接收参数的方式
  • GET请求
  • get/post区别
  • Cookie以及请求头


GET请求

采用query方式

controller java 接收参数 是 controller接收请求参数_服务器


代码形式:

@GetMapping("/demo/{id}")
public Enterprise selectOne(@RequestParams Integer id) {
        return this.enterpriseService.queryById(id);
    }

## POST请求 通常query参数是GET请求时常用的携带参数方式。但是POST请求也要携带query类型的参数,可以把它拼接到url里,spring后端也可以接收到,但是在一般情况下采用requestbody来接收


get/post区别

  1. GET在浏览器回退的时候无害,而post有害
  2. get请求产生的url可以当作书签,而post不行
  3. get请求的的结果会被浏览器缓存,post不会
  4. get请求只能被url编码(前端使用URLEncode)
  5. post请求的参数无法被浏览记录保存(参见第二点)
  6. 长度有限制(IE浏览器限制为2K,同时各个浏览器不同)限制
  7. get请求是明文传输拼接在url中的,不可以传递明文信息,而post放在requestbody中
  8. get请求只接受ASCII字符而POST没有限制


从根源上来说HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request
body,给POST带上url参数,技术上是完全行的通的。
从某种角度上说,http只是一个协议,规定了数据传输的格式,但是并没有强制人们准守。就像规定了红灯停绿灯行的规则,浏览器、后端服务器的底层设计往往都准守这样的准则。因此浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。如果你用GET服务,而在request
body传输,不同服务器的处理方式也是不同的,有些服务器会读出数据,有些服务器直接忽略,所以,虽然GET可以带request
body,也不能保证一定能被接收到。

所以在社会行走还是要遵守规矩啊!

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?

  1. GET与POST都有自己的语义,不能随便混用。
  2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
  3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

@PostMapping("insert")
    public ReturnValue insert(@RequestBody Honor honor){
        this.honorService.insert(honor);
        return ReturnValue.success();
    }

这里可以通过在requestbody中传入一个实体的形式来进行数据插入

controller java 接收参数 是 controller接收请求参数_http_02

Cookie以及请求头

这种情况一般出现在前端利用http请求头发送数据的情况,一种常见的场景就是用在oath2 jwt鉴权的情况下,会把token放在请求头里传输到后端,底层利用aop来实现鉴权
1、@RequestHeader
2、@CookieValue

@PostMapping("cookie")
    public void cookie1(HttpServletRequest request) {
        System.out.println(request.getHeader("myHeader"));
        for (Cookie cookie : request.getCookies()) {
            if ("myCookie".equals(cookie.getName())) {
                System.out.println(cookie.getValue());
            }
        }
    }

controller java 接收参数 是 controller接收请求参数_TCP_03


controller java 接收参数 是 controller接收请求参数_http_04


参考博客:get请求和post请求的详细区别Controller接收参数的几种常用方式