OkHttp上传Json嵌套对象

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大新闻!Magic Leap造假,HoloLens即将入华商用

昨天微软搞了大新闻&#xff0c;Terry和Alexi到了深圳&#xff0c;在WinHEC大会上宣布了2017上半年HoloLens正式入华商用。 而唯一竞争对手Magic Leap今天也被曝光其设备造假&#xff0c;各大科技媒体纷纷报道&#xff0c;部分相关报道如下&#xff1a; 【新浪科技】Magic Lea…

struts+hibernate+oracle+easyui实现lazyout组件的简单案例——struts.xml配置详情

最后我们来看一下struts.xml里面是怎么配置的呢&#xff0c; struts.xml: <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://strut…

集合框架 Queue---BlockingQueue详解

转载自 集合框架 Queue---BlockingQueue详解 摘要&#xff1a;本例介绍一个特殊的队列:BlockingQueue,如果BlockingQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状态,直到BlockingQueue进了东西才会被唤醒,同样,如果BlockingQueue是满的,任何试图往里存东西的操…

cursor 过滤 android,Android cursor query方法详解

1.cursor query 方法入参public final Cursor query (Uri uri, String[] projection,String selection,String[] selectionArgs, String sortOrder)第一个参数&#xff0c;uri&#xff0c;rui是什么呢&#xff1f;好吧&#xff0c;上面我们提到了Android提供内容的叫Provider&a…

java实现动态验证码源代码——jsp页面

我们通常在其他网站注册或者登陆的时候会发现一个很高大上的验证码&#xff0c;那么怎么用java代码实现呢&#xff1f;下面我给大家贴一下我写的方法&#xff1a; 此文章是写的前台jsp页面的代码&#xff1a; <% page language"java" import"java.util.*&quo…

集成Swagger(API)---SpringBoot

集成Swagger(API) 学习目标: 了解Swagger的概念及作用掌握在项目中集成Swagger自动生成API文档Swagger简介 前后端分离 前端 -> 前端控制层、视图层后端 -> 后端控制层、服务层、数据访问层前后端通过API进行交互前后端相对独立且松耦合产生的问题 前后端集成,前端或者…

win10硬盘修复工具使用教程

DiskGenius 下载地址https://www.diskgenius.cn/download.php https://baijiahao.baidu.com/s?id1651410139210648102&wfrspider&forpc win10硬盘修复工具使用教程 小白一键重装系统 发布时间&#xff1a;19-11-2810:17惠州市早点科技官方帐号&#xff0c;优质创作者…

.NET Core Tools转向使用MSBuild项目格式

微软之前为了让.NET Core和ASP.NET Core能够支持Windows Visual Studio之外的开发平台&#xff0c;创建了基于project.json格式的项目系统。不过可惜&#xff0c;这种格式与之前的.csproj/MSBuild无法兼容。来自微软的Rich Lander近期宣布&#xff0c;.NET Core Tools将在最新的…

java多线程之:SynchronousQueue队列

转载自 java多线程之&#xff1a;SynchronousQueue队列 SynchronousQueue是这样一种阻塞队列&#xff0c;其中每个 put 必须等待一个 take&#xff0c;反之亦然。同步队列没有任何内部容量&#xff0c;甚至连一个队列的容量都没有。 不能在同步队列上进行 peek&#xff…

android:background大小,小Demo小知识-android:foreground与android:background

-----------------------------------------------前言君--------------------------------------------------正好碰到了这个foreground属性平时没怎么用到过。这次用到&#xff0c;就特意的去看了下。在这里记录一下。------------------------------------------------正文君…

java实现动态验证码源代码——绘制验证码的jsp

接着上一篇的前台jsp页面&#xff0c;我们单独写一个绘制验证码的jsp页面&#xff1a; <% page contentType"image/jpeg"import"java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"pageEncoding"utf-8"%> <%!Color getRandColo…

异步任务---SpringBoot

异步任务 同步 1、创建一个service包 2、创建一个类AsyncService 异步处理还是非常常用的&#xff0c;比如我们在网站上发送邮件&#xff0c;后台会去发送邮件&#xff0c;此时前台会造成响应不动&#xff0c;直到邮件发送完毕&#xff0c;响应才会成功&#xff0c;所以我们…

idea报错:Error:java: JDK isn‘t specified for module ‘xxx‘

idea报错&#xff1a;Error:java: JDK isn‘t specified for module ‘xxx‘ Code_LiYi 2020-07-01 11:54:34 274 收藏 分类专栏&#xff1a; 学海漂游 版权 错误&#xff1a;idea报错Error:java:JDK isn’t specified for module “XXXX” 原因&#xff1a;项目中的.idea文…

微软推出《我的世界》“编程一小时”免费教程,携手Code.org普及计算机科学教育

为了继续支持全球计算机科学教育周期间的“编程一小时”年度全球活动&#xff08;12月5日至11日&#xff09;&#xff0c;微软和Code.org共同发布了针对学生和教育工作者的《我的世界》造物主版编程教程。网页版全新教程现已免费上线&#xff0c;初学者可以通过教程中简单的游戏…

集合框架 Queue---ArrayBlockingQueue

转载自 集合框架 Queue---ArrayBlockingQueue 摘要&#xff1a;java.util.concurrent类java.util.concurrent 类 ArrayBlockingQueue<E> java.lang.Object java.util.AbstractCollection<E> java.util.AbstractQueue<E> java.util.…

android 处理http状态码,OkHttp(Retrofit)对于http状态码202的处理

http code 202 :The request has been accepted for processing, but the processing has not been completed.这时候&#xff0c;服务器给你的body是空的&#xff0c;如果你使用去解析为json&#xff0c;那么&#xff0c;恭喜你java.io.EOFException: End of input at line 1 …

java实现动态验证码源代码——接受ajax的jsp

此篇主要介绍的是接受前台ajax的数据&#xff0c;判断输入的验证码是否正确&#xff1a; <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <%//从session里面获取图片验证码String inputCode request.getParameter…

邮件发送---SpringBoot

邮件任务 邮件发送&#xff0c;在我们的日常开发中&#xff0c;也非常的多&#xff0c;Springboot也帮我们做了支持 邮件发送需要引入spring-boot-start-mailSpringBoot 自动配置MailSenderAutoConfiguration定义MailProperties内容&#xff0c;配置在application.yml中自动装…

2.Idea分支的merge

1.选择需要merge到的版本 比如说develop是主板本。temp是紧急分支版本的话。 name要选到develop这个版本进行操作。 2.进行merge 1.选择“merge changes” image.png 2.选择对应的要merge的版本 image.png 3.记得PUSH代码 0人点赞 IDEA git使用 作者&#xff1a;了凡_850…

在Linux上编译dotnet cli的源代码生成.NET Core SDK的安装包

.NET 的开源&#xff0c;有了更多的DIY乐趣。这篇博文记录一下在新安装的 Linux Ubuntu 14.04 上通过自己动手编译 dotnet cli 的源代码生成 .net core sdk 的 deb 安装包。 1&#xff09;安装一个现有版本的 .net core sdk sudo sh -c echo "deb [archamd64] https://apt…