说明:
(1) 为什么写了本篇博客?:在【SpringBoot电商项目商品分类模块增加目录分类接口】中,发现有的POST请求的参数放在了url后,有的放在了Body中;对此,存在疑惑的地方;所以写了本篇博客;
同时,本篇博客也顺手总结了@Param,@RequestParam,@RequestBody这三个【与接收参数有关】的注解;
(2) 本篇博客参考的文章有:
● 本篇博客参考了一个知乎问答【Post方法参数写在body中和写在url中有什么区别?】;
(3)声明: 本篇博客的主要目的是【帮助自己形成自洽】;但是, 自己深刻感受到,对HTTP协议的了解还是太浅了 ;以后,需要慢慢提升;
1.POST请求:方法参数放在url中和放在body中,有什么区别?:参考知乎的回答;
这儿的内容,完全照抄自知乎问答【Post方法参数写在body中和写在url中有什么区别?】,该回答的作者是【严振杰】;
2.比如,本项目中;(包括【@Param,@RequestParam,@RequestBody这三个【与接收参数有关】的注解,总结)
(1)POST请求,可以把参数放在url中;(涉及,@RequestParam注解)
PS:在【后台Controller使用【方法参数】接收【前端传过来的,请求中的数据】;(Post请求)】第一次介绍了【@RequestParam注解】;
目前来看这儿的逻辑是(起码目前可以这样看): 【get请求,参数是放在url中,而且经常出现如user_name这样的名字;为了能以userName的方式接收到这个参数;我们就使用了@RequestParam注解】→【然后,@RequestParam注解可以推广开来;凡是参数是在url中的请求,都可以使用@RequestParam注解去接收】→【于是,即使对于POST请求,如果参数在url中,也可以使用@RequestParam注解】→【其实,如果参数名和接口中的参数名写对,即使不用@RequestParam注解,也是能接收到参数的;也就是说,@RequestParam注解可以看成是一种保险】;
补充(20220310): 如果后端是使用方法参数(而不是Java Bean)去接收参数时,才能使用@RequestParm注解;;;如果前端的参数放在url中,而后端是使用JavaBean去接收参数,那么我们是不能使用@RequestPram注解的;
(2)POST请求,可以把参数放在body中;(涉及,@RequestBody注解)
声明: 对于POST请求,如果参数放在body中,我们必须使用@RequestBody注解才能接收到参数;如果不加,无法从请求体中获取数据,就会提示错误。
即,@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。
(3)额外插:@Param注解;
最近一次说道@Param注解,是在【SpringBoot电商项目用户模块普通用户登录接口开发】;
(1) 上一次在Mapper接口的方法中,使用【@Param注解】是在【OA系统开发请假申请的service层】;
(2) 对于Mybatis来说,如果Mapper接口中的方法只有一个参数的话,是 可以 不用【@Param注解】注解的;但是,如果有多个参数的话,是一定要使用【@Param注解】注解的;否则,mapper.xml中的SQL语句在获取参数的时候,就会混乱;(即@Param注解的作用类似于:给其参数起个别名,在投入到SQL之前,最后归整一下)
下图说道不不严谨,重点看下划线的部分(存疑);