Retrofit初探——POST方式提交JSON数据

使用Retrofit通过post提交Json数据 Retrofit:A type-safe REST client for Android and Java 使用Retrofit分为四步: 1.创建Retrofit对象 2.创建访问请求 3.发送请求 4.处理结果 这里介绍前了前三步 首先创建Retrofit对象: 创建访问请求:项目中post请求除了键值 阅读详情

0x00 HTTP Method:POST

POST请求再日常的使用中很常见,比如登录,上传数据中使用。之前介绍了GET方式,今天简单介绍下如何使用POST来提交数据。

0x01 常用的POST方式

POST方式提交数据再浏览器中的表现主要是使用Form,在客户端中国中的主要表现是提交JSON数据。当然,具体是什么数据格式并不重要,我们可以通过抓包来分析:最终数据都是一样的。

使用Model对象

首先新建一个model对象,比如:User,添加常用的熟悉和get/set方法。新建我们的Service:

@POST("/send")
public Call<ResponseBody> modelPost(@Url String url, @Body User user);

测试代码:

@Test
public void modelPost() throws Exception {
   HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
   logging.setLevel(HttpLoggingInterceptor.Level.BASIC);

   OkHttpClient client = RetrofitManager.getClient(logging);

   Retrofit retrofit = RetrofitManager.getRetrofit(client);
   ExampleService service = retrofit.create(ExampleService.class);

   String url = "http://www.remoteurl.com";
   User user = new User();
   user.setName("ttdevs");
   Call<ResponseBody> example = service.modelPost(url, user);

   final CountDownLatch countDownLatch = new CountDownLatch(1);
   example.enqueue(new Callback<ResponseBody>() {
       @Override
       public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
           try {
               print(response.body().string());
           } catch (IOException e) {
               e.printStackTrace();
           }

           countDownLatch.countDown();
       }

       @Override
       public void onFailure(Call<ResponseBody> call, Throwable t) {
           countDownLatch.countDown();
       }
   });
   countDownLatch.await();
}

使用RequestBody对象

这里我们来提交一份JSON数据,首先还是再Service中创建一个方法:

@POST("/send")
public Call<ResponseBody> withRequestBody(@Url String url, @Body RequestBody body);

再接着创建我们的请求:

@Test
public void withRequestBody() throws Exception {
    HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
    logging.setLevel(HttpLoggingInterceptor.Level.BASIC);

    OkHttpClient client = RetrofitManager.getClient(logging);

    Retrofit retrofit = RetrofitManager.getRetrofit(client);
    ExampleService service = retrofit.create(ExampleService.class);

    String url = "http://www.remoteurl.com";

    JSONObject result = new JSONObject();
    try {
        result.put("record", "hello");
    } catch (JSONException e) {
        e.printStackTrace();
    }
    RequestBody body = RequestBody.create(MediaType.parse("application/json"), result.toString());
    Call<ResponseBody> example = service.withRequestBody(url, body);

    final CountDownLatch countDownLatch = new CountDownLatch(1);
    example.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            try {
                print(response.body().string());
            } catch (IOException e) {
                e.printStackTrace();
            }

            countDownLatch.countDown();
        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            countDownLatch.countDown();
        }
    });
    countDownLatch.await();
}

总结

第一种方法,我们需要为每一个请求的对象创建一个Model,如果你不想创建model则可以选择第二种方式,直接创建一个JSON字符串,然后提交即可。还是相当简答的。

—— EOF ——

PCA9698嵌入式C++驱动库:高性能I²C GPIO扩展方案 GPIO扩展是嵌入式系统中解决MCU引脚资源不足的关键技术,其核心原理在于通过串行总线(如I²C)桥接主控与外设寄存器,实现逻辑引脚到物理IO的映射与状态同步。技术价值体现在低开销、高确定性与多设备可扩展性,广泛应用于工业控制、传感器节点和LED矩阵驱动等实时场景。本文聚焦PCA9698——一款支持24通道双向IO、中断输出与可编程驱动模式的I²C GPIO扩展芯片,结合其C++驱动库的影子寄存器机制、端口级原子操作及非阻塞同步设计,提供面向资源受限平台(如ATmega2560)的工程就绪方案。 阅读详情

相关推荐

LCD、LED、OLED、Mini LED、Micro LED、全阵列LED、QLED、QD-OLED、QNED、AMOLED是什么意思?

LCD(液晶显示器,Liquid Crystal Display)定义:LCD 是一种利用液晶材料控制光线通过的显示技术,需依靠背光源(如冷阴极荧光灯 CCFL 或 LED)照亮液晶层以形成图像。技术原理:液晶分子在电场作用下改变排列,控制背光通过的强度和颜色。液晶本身不发光,需外部光源。特点:结构包括背光层、液晶层、彩色滤光片和偏光片。响应时间较慢,黑色表现因背光漏光而偏灰。LED(发光二极管显示,Light Emitting Diode)定义。

中国最威武的城市!武功军威-武威,铁骨铮铮! 3431

Retrofit Post请求参数为Json

Retrofit请求Post请求参数说明 1. 说明: Retrofit网络框架使用注解支持多种请求方式,请求参数也是注解实现的;这里主要讲解Post请求时的参数设置,涉及注解@Field、@FieldMap、@FormUrlEncoded、@Body 2. POST请求简介: HTTP请求有GET、POST、PUT、DELETE、HEAD、OPTIONS…等,其中GET请求使用明文URL获取服务端对应资源,PUT请求为服务器新增一条数据,DELETE请求服务端删除某条数据,HEAD请求仅返回请求头,可以

chuyouyinghe的专栏 5495

使用 Python 获取实时港股行情数据

在本教程中,你将学习如何通过 Infoway API 获取港股实时行情数据,具体以腾讯控股(0700.HK)和汇丰控股(0005.HK)为例,使用 Python 进行数据请求和解析。

kk_stoper的博客 1518

Retrofit进行post提交json数据

1:先看一看xutils3的提交代码 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 如下图:非常好用 String acco...

疾风剑豪 2万+

别再只仿真原理图了!用ADS做微带功分器,版图仿真这一步才是关键

本文深入探讨了使用ADS进行微带功分器设计时版图仿真的重要性,指出原理图仿真与版图仿真的本质差异及其对性能的影响。通过详细分析版图效应、关键设置和优化策略,帮助工程师避免常见陷阱,提升设计效率和准确性。文章特别强调了版图仿真在确保微波电路性能中的关键作用。

weixin_42561476的博客 415

【车辆仿真】从0开始建立dSPACE RT Simulink工程:CAN通信(RTICANMM方法)

【工程环境信息】:本文基于链接文章搭建SCALEXIO Rack RTPC总线节点,用于与AutoBox通信硬件:上位机:惠普台式PC(Windows 11专业版)下位机(实时机):AutoBox (DS1006)板卡:DS6342软件:本文所使用的DBC链接提示:以下是本篇文章正文内容,下面案例可供参考!!!的部分一定记得配置,其他的按需配置RTICANMM的灵活度非常高,尽可能参考Help文档,理解相应的配置内容官方有RTICANMM的样例工程,在下方路径。

winnizap的博客 2384

用retrofit2发送post multipart/form-data请求,返回json数据

因为请求的content-type是multipart/form-data,所以接口的注解加上@Multipart,参数也要加上@Part。这个最开始不理解,用成了@FormUrlEncoded,导致一直请求失败。

iamjustnobody的博客 2014

TSMaster二次开发实战:如何用Python搞定CAN/CANFD事件回调(附完整代码)

本文详细介绍了如何利用Python进行TSMaster二次开发,实现CAN/CANFD事件回调功能。通过实战代码演示,讲解了预发送与后处理回调的核心区别、注册流程、资源管理及性能优化技巧,帮助工程师高效构建自动化测试与数据监控应用。

star的博客 672

retrofit2 发送json数据_Retrofit进行post提交json数据

1:先看一看xutils3的提交代码String account = editText1.getText().toString();String password = editText2.getText().toString();JSONObject js_request = new JSONObject();//服务器需要传参的json对象try {js_request.put("account...

weixin_34326484的博客 728

python爬取淘宝数据

python爬取淘宝数据淘宝评论 淘宝评论 打开淘宝,选择打开需要爬取的商品的评论。在谷歌浏览器选择开发者工具,选择network,找到list_detail_rate.htm?itemId=624466733121,点击headers、previews,可以看见相应的评论数据。 爬取一页屏评论代码如下 import re import requests headers = { 'Referer': '在headers中', 'User-Agent': '在

qq_36333776的博客 5800

使用Retrofit发送POST请求提交JSON数据

Retrofit官网:https://square.github.io/retrofit/ 示例如下 HttpService.java import okhttp3.RequestBody; import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.Headers; import retrof...

weixin_34023982的博客 1883

14、X射线图像处理与特征提取全解析

本文全面解析了X射线图像处理与特征提取的关键技术,涵盖图像预处理、滤波、边缘检测、分割与恢复等流程,并深入探讨了几何特征(如面积、周长、圆度、椭圆拟合)、强度特征(均值、方差、对比度)、傅里叶描述符、不变矩(Hu矩、Gupta矩)以及局部描述符(SIFT、SURF)和稀疏表示方法。同时介绍了特征选择的过滤法、包装法和嵌入法,并结合Matlab代码示例展示了各类特征的实际提取过程。文章最后总结了当前技术的应用现状,并展望了深度学习在X射线图像分析中的未来潜力。

pz89012345的博客 135

Android通过JSON传输图片,Retrofit 通过 POST 提交 JSON 数据、多图片多文件上传

Retrofit通过POST提交JSON数据、图片文件前言:最近做的项目采用了retrofit框架,但是遇到了传图片和json数据的需求,就不会用了,经过长时间的搜索与亲身测试,终于将这两种需求的处理方式都学会了,现在分享给大家,也用于自己记录,万一哪天忘了怎么用,再拿出来温习一下。这也是2016年最后一篇博客。提交json数据准备:androidstudio,最新的Retrofit,如果用的是e...

weixin_42629671的博客 546

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Retrofit2提交JSON格式的数据

上述代码的掣肘显而易见,那就是需要为每个请求都封装一个bean。使用这种方式的博友们还专门提供了自动生成这样的bean的工具类,可谓良苦用心。Java Web开发中也许习惯以bean作为查询条件,每张数据库表对应一个bean,很容易获得。即使bean中很多字段根本用不到,但是简单粗暴将整个bean传过去作为参数,使用起来非常方便。而以移动端的开发习惯,我们并不会为每个request封装一个特定的bean。而只会为每个

hmh0512的专栏 5349

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

retrofit的post方法使用

1、retrofit利用post方式发送json数据 1.1、方式一 @POST(“/login”) Observable login(@Body User user); 使用@Body注解传入一个对象,若User类如下, public class User { public String name; public String password; } 那么,...

wh义华的专栏 5974

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Retrofit2的POST请求MultiPart与FormUrlEncoded

前言 最近在项目里使用了Retrofit2 + Rxjava框架封装网络请求,照着网上的教程一步步搭建起来,顺利地完成了网络请求模块的工作,同时通过okhttp3提供的logging拦截器打印出的请求与服务器回复日志,也是正常的参数与数据,但不知为何日志显示得很长很详细,如下图(还没截完),通过抓包工具看到的参数key也是很长很详细的key,这就令人疑惑了,究竟是为什么呢? 解决疑问 通过向同事...

weixin_41633457的博客 1万+

retrofit2 发送json数据_Android如何通过Retrofit提交Json格式数据

本文将介绍如何通过retrofit库post一串json格式的数据。首先post的json数据格式如下:{"Id": "string","DeviceId": "string","Name": "string","SumDistance": 0,"RouteNo": "string","SumPoints": 0,"SetupTime": "2016-06-10T13:11:00.766Z","U...

weixin_36006615的博客 1294

retrofit2 发送json数据_如何通过Retrofit提交Json格式数据

展开全部本文将介绍如何通过retrofit库post一串json格式的数32313133353236313431303231363533e78988e69d8331333363353861据。首先post的json数据格式如下:{"Id": "string","DeviceId": "string","Name": "string","SumDistance": 0,"RouteNo": "str...

weixin_35656285的博客 1016

post方式发送json格式的网络请求(基于Retrofit2)

笔者最近用图灵V2版本,V2跟V1版比起来,很大的区别是网络请求,V1版只需一条网址链接即可请求数据,V2版本则需要以请求参数格式为 json的post请求数据,无疑增大了难度 打开图灵官网API V2.0接入文档 文档给我们提供了请求示例和返回示例,看着数据十分复杂,复杂的数据就不必用android原生的json解析方式了,因为很容易出错。这里用谷歌的神器gson以及它的插件GsonFormat...

skyang在路上 3万+

Retrofit上传Json数据

首先将要上传的数据转换成为Json数据,可以用Gson直接转换或者用JSONObject类,将HashMap数据转换为Json,这里使用后面一种方式来实现,代码如下: // 将数据封装为map类型 val params = HashMap<String, String>() params["message"] = feedbackContent ...

qq_36342492的博客 2230

Retrofit如何实现Form表单提交和Json提交-by:nixs

我们都知道在Http请求方法中一般分为Get和Post请求。但是实际上不止这两种:HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式。 1、OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性 2、HEAD 向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。 3、GET 向特定的资

学习一定要有针对性的练习-实操! 1089

retrofit2 发送json数据_使用Retrofit发送POST请求提交JSON数据

示例如下HttpService.javaimportokhttp3.RequestBody;importretrofit2.Call;importretrofit2.http.Body;importretrofit2.http.Headers;importretrofit2.http.POST;public interfaceHttpService {String BASE_URL= "http:...

weixin_29022115的博客 1025

retrofit2 发送json数据_Retrofit 2.0直接使用JSON进行数据交互

之前使用Retrofit都是将JSON串转化为POJO对象,针对不同的业务协议,定义相应的接口和参数列表。但是此种方式一般用在自己内部协议基础上,具体大的项目中,有些第三方的集成功能,一般都采用统一的方式即请求JSON和回应JSON进行数据交互,不可能每个第三方协议都会去定义与协议相应的POJO对象。HTTP肯定有GET和POST方法,先定义Retrofit Api的interface:packa...

weixin_29419979的博客 1634

Retrofit2之post 提交json字符串

关于Retrofit2 post 提交json字符串,我在这里举个小例子 eg:http://xxxxxx/login?”username”:”xxx”,”password”:”xxxxx” 假设请求url如上所示,{“username”:”xxx”,”password”:”xxxxx”}是请求的数据 我在用retrofit2 写请求时,是这么解决的 @POST(xxx) Observab

作茧自缚丶的博客 5383
上一篇: 使用Websocket实现消息推送(下)
下一篇: Data Binding给Button设置背景无效
ttdevs
博客等级 码龄15年 388粉丝 91原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值