public static DevInfoVo queryRCP() throws Exception {// 东八区时区Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+8:00"));//JSONObject obj = JSON.parseObject(JSON.toJSONString(pojo));JSONObject obj = new JSONObject();obj.put("Authorization", "accessKey=WR3512xPe7UAiFCxoKez5KPu&path=%2FaddDevice&timestamp=1590459327607&method=SHA1&sign=7b4818f59f53e3b529c76c560a7d65014e1f7388");FormBody.Builder body = new FormBody.Builder();for (Map.Entry<String, Object> entry : obj.entrySet()) {if (entry.getValue() != null) {body.addEncoded(entry.getKey(), entry.getValue().toString());}}Request.Builder request = new Request.Builder().url(sanAPI).addHeader("Authorization", IotTokenUtil.getAuthorization());//.post(body.build());byte[] data = HttpUtil.executeBody(request);DevInfoVo devInfoVo = (DevInfoVo) JSON.parseObject(data, DevInfoVo.class);return devInfoVo;
}
/*** IOT接口查询** @param* @return* @throws IOException*/
public static CmdResultVo queryRCP(SendOrderDto sendOrderDto) throws Exception {// 东八区时区Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+8:00"));JSONObject body = new JSONObject();JSONObject requestData = new JSONObject();try {body.put("power", sendOrderDto.getParams().getPower());requestData.put("params", body);requestData.put("cmd", sendOrderDto.getCmd());} catch (JSONException e) {e.printStackTrace();}RequestBody requestBody = FormBody.create(MediaType.parse("application/json; charset=utf-8"), String.valueOf(requestData));Request.Builder request = new Request.Builder().url(sanAPI).addHeader("Authorization", IotTokenUtil.getAuthorization()).post(requestBody);byte[] data = HttpUtil.executeBody(request);CmdResultVo cmdResultVo = (CmdResultVo) JSON.parseObject(data, CmdResultVo.class);return cmdResultVo;
}
public class HttpUtil {private static OkHttpClient client = buildClient(5);public static final MediaType MEDIA_TYPE_JSON = MediaType.parse("application/json;charset=UTF-8");/*** 执行器 请求失败将直接抛出异常** @param request* @return 返回 data 节点数据* @throws IOException*/public static JSONObject execute(Request.Builder request) throws IOException {Call call = client.newCall(request.build());return execute(call);}/*** 执行器** @param call* @return* @throws IOException*/public static JSONObject execute(Call call) throws IOException {try (Response res = call.execute()) {if (!res.isSuccessful()) {throw new RuntimeException("peake.api request error " + res.code() + " " + res.message() + " " + call.request().url().toString());}if (res.body() == null) {throw new RuntimeException("peake.api response body must not null");}String body = new String(res.body().bytes());return JSON.parseObject(body);}}/*** 执行器** @param request* @return* @throws IOException*/public static byte[] executeBody(Request.Builder request) throws IOException {Call call = client.newCall(request.build());return executeBody(call);}/*** 执行器** @param client* @param request* @return* @throws IOException*/public static byte[] executeBody(OkHttpClient client, Request request) throws IOException {Call call = client.newCall(request);return executeBody(call);}/*** 执行器** @param call* @return* @throws IOException*/public static byte[] executeBody(Call call) throws IOException {try (Response res = call.execute()) {if (!res.isSuccessful()) {throw new RuntimeException(MessageFormat.format("request error {0} {1} {2}",res.code(), res.message(), call.request().url()));}if (res.body() == null) {return null;}return res.body().bytes();}}public static OkHttpClient buildClient(long seconds) {return new OkHttpClient.Builder().callTimeout(Duration.ofSeconds(seconds)).build();}public static OkHttpClient buildClient(long seconds, boolean redirect) {return new OkHttpClient.Builder().callTimeout(Duration.ofSeconds(seconds)).followRedirects(redirect).followSslRedirects(redirect).build();}}

OkHttp上传Json嵌套对象

「已注销」 2019-05-17 01:38:28  440  收藏
分类专栏: Android
版权
应需求,需要传递一个如下的表单,使用传统的formbody提交键值对是不太好实现的。

{
  "properties": {
      "name": "Imfondof",
      "age": 17,    
      "sex": "不详"
  }
}
 
所以用到了Json:

将内部的属性封装到一个Json对象里,
然后将这个Json对象作为主Json对象的值传入
将主Json转化为RequestBody 传入到我们的请求体中即可
JSONObject body = new JSONObject();
JSONObject requestData = new JSONObject();
try {
    body.put("name", name);
    body.put("age", age);
    body.put("sex", sex);
    requestData.put("otherProps", body);
} catch (JSONException e) {
    e.printStackTrace();
}
RequestBody requestBody = FormBody.create(MediaType.parse("application/json; charset=utf-8"), String.valueOf(requestData));
————————————————
版权声明:本文为CSDN博主「「已注销」」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/easy_purple/article/details/90283501

OkHttp上传Json嵌套对象相关推荐

  1. FastAPI上传POST嵌套JSON对象及List列表BaseModel,python

    FastAPI上传POST嵌套JSON对象及List列表BaseModel,python from typing import Optional, Union, Listimport uvicorn ...

  2. Retrofit 2.0 超能实践(三),轻松实现多文件/图片上传/Json字符串/表单

    通过前两篇姿势的入门 Retrofit 2.0 超能实践,完美支持Https传输 Retrofit2.0 完美同步Cookie实现免登录 本文出自:http://blog.csdn.net/sk719 ...

  3. Retrofit 2.0 轻松实现多文件/图片上传/Json字符串/表单

    如果嫌麻烦直接可以用我封装好的库:Novate: https://github.com/Tamicer/Novate 通过对Retrofit2.0的前两篇的基础入门和案例实践,掌握了怎么样使用Retr ...

  4. mysql导入微信小程序云开发_微信小程序-云开发数据库上传json文件

    小程序新增了云开发功能,对于个人开发者是个利好消息.可以省去购买服务器,购买域名以及繁琐配置等步骤,减轻了开发者的负担.至于如何云开发我就不在这里赘述了,请移步微信小程序云开发官方文档,说的很清楚.这 ...

  5. android 头像利用okhttp上传到服务器部分----萌新成长之路

    上一篇博客我们成功完成了从照相机拍摄和相册里选择图片并在app中显示出来.我们也完成了初步的裁剪.今天我们来把用户的数据上传到服务器,模拟一个用户在游戏内部修改自己头像,点击确定以后的保存过程. 步骤 ...

  6. Android开发文件上传格式,(android开发)使用okhttp上传文件

    开发android手机客户端,常常会需要上传文件到服务器,比如:你手机里的照片. 使用okhttp会是一个很好的选择.它使用很简单,而且运行效率也很高. 首先,在 app/build.gradle 的 ...

  7. android项目中使用的服务器上,android 开发中使用okhttp上传文件到服务器

    开发android手机客户端,常常会需要上传文件到服务器,比如:你手机里的照片. 使用okhttp会是一个很好的选择.它使用很简单,而且运行效率也很高. 首先,在 app/build.gradle 的 ...

  8. spring boot上传阿里云对象存储OSS快速上手(一、控制台简介)

    代码实现请看下一篇: spring boot上传阿里云对象存储OSS快速上手(二.代码实现,复制粘贴可用) 简介: 1.阿里云对象存储OSS其实就是一个文件存储的服务 2.在我们的开发过程中会遇到类似 ...

  9. Okhttp上传文件

    使用Okhttp 上传文件 public void updateHeadImg(){new Thread(new Runnable() {@Overridepublic void run() {try ...

最新文章

  1. linux连接小米随身wifi密码忘记了,小米wifi管理员密码忘记了怎么办?
  2. 什么是优秀管理者的第一课?【如何搞垮一个企业】
  3. WSO2 API Manager安装部署配置
  4. B Graph(异或最小生成树)
  5. 女子将车垂直开上标志杆,警方回应...
  6. java 序列化 兼容_Java序列化 – java.io.InvalidClassException本地类不兼容
  7. PHP与mysql的基础知识
  8. quarts集群 运维_精讲Elastic-job + Quartz实现企业级定时任务
  9. 做了8年软件测试的我,是如何从菜鸟快速成长为测试工程师的?
  10. Linux内核空间内存申请函数kmalloc、kzalloc、vmalloc的区别【转】
  11. 拜耳2020年10个新植保制剂商业化,3个生物技术性状项目推进至上市阶段
  12. 密码套件 and 弱密码套件漏洞
  13. ppt计算机实验报告册,PPT实验报告册
  14. 三人行必有我师焉 [ 光影人像 东海陈光剑 的博客 ]
  15. Arrayfire E0992 命令行错误: 宏定义无效: AF_<CPU/CUDA/OPENCL>
  16. 深入浅出--何为多线程(引用自大神Kyrie lrving)
  17. CT前瞻(三):Adobe系列XD软件绘制简单的原型图与交互设计
  18. npm被玩坏了:修复nodejs(‘npm‘ 不是内部或外部命令)
  19. 飞书二开系列之创建测试企业与企业应用等准备工作(一)
  20. 数码照片处理实例:用Photoshop处理照片的背景

热门文章

  1. 2019-03-06-算法-进化(三数之和)
  2. 最小生成树KrusKal算法(并查集)
  3. [2020多校A层12.1]树(倍增/单调栈/dfs栈)
  4. Technocup 2020 - Elimination Round 2 E. Rock Is Push dp
  5. P2634 [国家集训队]聪聪可可(点分治做法)
  6. House Building HDU - 5538
  7. 杜教BM模板(用于求线性递推公式第N项)
  8. SP10707 COT2 - Count on a tree II
  9. 牛客网【每日一题】4月21日题目精讲 糖糖别胡说,我真的不是签到题目
  10. YBROJ洛谷P3211:XOR和路径(线性基,期望dp)