Android retrofit 注解@QueryMap和@Body的区别
来源:互联网 发布:linux exit code 编辑:程序博客网 时间:2024/05/21 06:23
使用retrofit这样框架快一年了,以前使用它传递参数时都是用@QueryMap注解传递,虽然知道这样不是很好,但是当时换框架的时候看到工作量太大就没有换成实体类形式了,之前的使用方式如下图:
由于最近在研究java后台,搭建了一个SSM框架想测试一下;因为之前以为HashMap只能采用这种方式传递,在今天的测试中发现并不是,其实使用HashMap同样可以采用@Body注解,而且@QueryMap跟@Body的区别非常大,先看按之前的方式使用@QueryMap:
上面是android的代码,使用了RxJava。在来看java后台的:
使用HttpServletRequest来接收是没有问题的,但是如果后台使用@RequestBody来接收参数就没法接收到了,而且连请求都没接收到:
下面我们来看一下,android Studio打印的日志,发现后台返回了400,并且发现参数拼接到连接后面了,这不是GET的传递参数的方式吗?但是我明明是POST注解请求:
我点击注解看了下源码,看到下面的注释,第一句的大意就是说:会把key和value拼接到url后面,所以才会出现刚刚日志中那种情况,而且看注释都是在讲GET请求下的使用,并没有POST的使用介绍,所以我感觉这个注解是主要为GET请求准备的:
在来看@Body,先看源码吧 ,注释的大体意思是:使用这个注解可以把参数放到请求体中,适用于 POST/PUT请求:
然后再看使用方式,和@QueryMap 一样的,而且它可以使用实体类,QueryMap 是不能注解实体类的:
在看打印的日志:
从日志看出来,这才是POST请求参数参数的方式。
好了!总结一下:@QueryMap注解会把参数拼接到url后面,所以它适用于GET请求;@Body会把参数放到请求体中,所以适用于POST请求。
如果你的项目是采用POST请求方式,不管是使用实体类还是使用HashMap最好采用@Body注解。虽然你使用QueryMap 可能也不会有什么问题(PS:这种共用的情况只适用于POST请求,GET请求不能使用@Body注解,否则会报错),就像楼主之前一样,一直都是采用QueryMap - _ - ,这里要心疼后台三秒钟!哈哈!!!!
如果你的项目是采用POST请求方式,不管是使用实体类还是使用HashMap最好采用@Body注解。虽然你使用QueryMap 可能也不会有什么问题(PS:这种共用的情况只适用于POST请求,GET请求不能使用@Body注解,否则会报错),就像楼主之前一样,一直都是采用QueryMap - _ - ,这里要心疼后台三秒钟!哈哈!!!!
阅读全文
0 0
- Android retrofit 注解@QueryMap和@Body的区别
- 【Android】Retrofit网络请求参数注解,@Path、@Query、@QueryMap...
- 【Android】Retrofit网络请求参数注解,@Path、@Query、@QueryMap...
- Retrofit网络请求参数注解,@Path、@Query、@QueryMap的使用
- Retrofit网络请求参数注解,@Path、@Query、@QueryMap...
- Retrofit网络请求参数注解,@Path、@Query、@QueryMap...
- Android Retrofit网络请求Service,@Path、@Query、@QueryMap、@Map...
- 【Android】Retrofit网络请求Service,@Path、@Query、@QueryMap...
- Android Retrofit网络请求Service,@Path、@Query、@QueryMap、@Map...
- 【Android】Retrofit网络请求Service,@Path、@Query、@QueryMap...
- Android Retrofit网络请求Service,@Path、@Query、@QueryMap、@Map...
- Android Retrofit网络请求Service,@Path、@Query、@QueryMap、@Map...
- body div 和 body>div 的区别
- documentElement 和 body 的区别
- html 和 body 的区别
- Retrofit中@Body的使用
- Android框架学习之Retrofit(三)retrofit和okhttp的区别
- Retrofit网络请求Service,@Path、@Query、@QueryMap...
- Android local.properties 文件读取
- java中的<<、>>、>>>移位运算符
- 前端试题大综合练习(四)
- 车辆2D/3D--Deep MANTA: A Coarse-to-fine Many-Task Network for joint 2D and 3D vehicle analysis
- 多线程学习笔记——判断线程状态
- Android retrofit 注解@QueryMap和@Body的区别
- Kafka分区策略浅谈
- ANDROID中调用文件管理器并返回选中文件的路径
- javascript简史
- 实习小白成长记
- json转Excel
- Linux中免密码登录及其传输文件
- SQL中存储过程和函数的区别
- WIN8 Prolific USB-to-Serial Comm Port : 该设备无法启动。 (代码 10)