继续使用上面的项目

1.被调用的项目

package com.jun.web2forokhttp.okhttp;

import com.jun.web2forokhttp.bean.HttpDomain;
import org.springframework.web.bind.annotation.*; import java.util.HashMap;
import java.util.Map; @RestController
public class PostReq {
@PostMapping(value = "/post/getInfo")
@ResponseBody
public HttpDomain getInfo(@RequestBody HttpDomain httpDomain){
HttpDomain useHttpDomain =new HttpDomain();
useHttpDomain.setType(httpDomain.getType()+"-post");
useHttpDomain.setAge(httpDomain.getAge()+10);
return useHttpDomain;
}
}

  bean:

package com.jun.web2forokhttp.bean;

import lombok.Data;

@Data
public class HttpDomain {
private String type;
private String name;
private String age;
}

  

2.调用的程序

package com.jun.web.okhttp;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.jun.web.okhttp.bean.HttpDomain;
import com.jun.web.okhttp.bean.HttpResponseDomain;
import okhttp3.*; import java.io.IOException; public class PostHttp {
public static void main(String[] args) throws JsonProcessingException {
formBody();
} /**
* 没有请求头的请求
*/
public static void formBody() throws JsonProcessingException {
HttpDomain httpDomain = new HttpDomain();
httpDomain.setType("1");
httpDomain.setName("tom");
httpDomain.setAge(10);
ObjectMapper objectMapper = new ObjectMapper();
String Json=objectMapper.writeValueAsString(httpDomain); //转JSON String url = "http://localhost:8080/post/getInfo";
OkHttpClient okHttpClient = new OkHttpClient();
MediaType json = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(json,Json);
Request request = new Request.Builder()
.url(url)
.post(body)
.build(); Call call = okHttpClient.newCall(request);
try{
Response response = call.execute();
String result = response.body().string();
System.out.println("post="+result);
HttpResponseDomain httpResponseDomain = objectMapper.readValue(result,HttpResponseDomain.class); //转对象
System.out.println("httpResponseDomain="+httpResponseDomain);
} catch (IOException e) {
e.printStackTrace();
}
}
}

  需要的bean

package com.jun.web.okhttp.bean;

import lombok.Data;

import java.io.Serializable;

@Data
public class HttpDomain implements Serializable{
private String type;
private String name;
private int age;
}

  

package com.jun.web.okhttp.bean;

import lombok.Builder;
import lombok.Data; @Data
@Builder
public class HttpResponseDomain {
private String type;
private String age;
private String name;
public HttpResponseDomain(){}
public HttpResponseDomain(String type,String age,String name){
this.type=type;
this.age=age;
this.name=name;
}
// private String name;
}

  

3.效果

  

二:注意点

1.RequestBody的数据格式

  常见的content-type主要有三种

    application/x-www-form-urllencoded

    application/form-data

    application/json

  上文的示例就是json格式。

2.如果数据包含文件

RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse("image/png"), file))
.build();

三:同步与异步

1.异步

package com.jun.web.okhttp;

import okhttp3.*;

import java.io.IOException;

public class Asyn {
public static void main(String[] args) {
String url = "https://www.baidu.com/";
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
} @Override
public void onResponse(Call call, Response response) throws IOException {
System.out.println("我是异步线程,线程Id为:" + Thread.currentThread().getId());
}
});
for (int i = 0; i < 10; i++) {
System.out.println("我是主线程,线程Id为:" + Thread.currentThread().getId());
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

  效果

  

001 okhttp3的POST使用的更多相关文章

  1. Okhttp3的简单使用

    1.get请求: /** * *okhttp get请求 * */ public class MainActivity extends AppCompatActivity { private stat ...

  2. swift 001

    swift 001  = 赋值是没有返回值的 所以 int a=10; int b=20; if(a=b){ printf("这个是错误的"); } swift  中的模运算 是支 ...

  3. okhttp3 post 数据打包方法

    import okhttp3.OkHttpClient; import okhttp3.FormBody; import okhttp3.Request; import okhttp3.Request ...

  4. [SDK2.2]Windows Azure Virtual Network (4) 创建Web Server 001并添加至Virtual Network

    <Windows Azure Platform 系列文章目录> 在上一章内容中,笔者已经介绍了以下两个内容: 1.创建Virtual Network,并且设置了IP range 2.创建A ...

  5. Retrofit2 + OkHttp3设置Http请求头(Headers)方法汇总

    在构建网络层时会遇到一个问题就是要手动配置Http请求的Headers,写入缓存Cookie,自定义的User-Agent等参数,但是对于有几十个接口的网络层,我才不想用注解配置Headers,目前网 ...

  6. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数001·3D函数

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数001·3D函数 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“proce ...

  7. Android 开发错误信息001

    Error:Execution failed for task ':app:dexDebug'. > com.android.ide.common.process.ProcessExceptio ...

  8. okhttp3 get post 简单封装

    最近打算在新项目中使用 okhttp3, 简单封装了一下异步 get post 因为 CallBack 也是在子线程中执行,所以用到了 Handler public class MyOkHttpCli ...

  9. okhttp3教程(1)如何引入库

    官网: https://github.com/square/okhttp https://github.com/square/okio 1,使用okhttp3需要两个库 在build.gradle c ...

随机推荐

  1. 【书评:Oracle查询优化改写】第二章

    [书评:Oracle查询优化改写]第二章 BLOG文档结构图 在上一篇中http://blog.itpub.net/26736162/viewspace-1652985/,我们主要分析了一些单表查询的 ...

  2. docker启动报错解决及分析(Cannot create container for service *******: cannot mount volume over existing file, file exists /var/lib/docker/overlay2/)

    现象: Cannot create container for service *******: cannot mount volume over existing file, file exists ...

  3. Android笔记(七十四) 详解Intent

    我们最常使用Intent来实现Activity之间的转跳,最近做一个app用到从系统搜索图片的功能,使用到了intent的 setType 方法和 setAction 方法,网上搜索一番,发现实现转跳 ...

  4. linux文件常用操作

    建立目录:mkdir mkdir -p [目录名] -p 递归创建 命令英文原意: make directories 切换所在目录:cd cd [目录] cd ~    进入当前用户的家目录 cd c ...

  5. 【问题】如何在Linux与Windows间共享文件

    实验环境 Linux LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: CentOS Description: CentOS L ...

  6. Oid 类

    参考地址:https://docs.microsoft.com/zh-cn/dotnet/api/system.security.cryptography.oid?redirectedfrom=MSD ...

  7. src挖掘过程之信息收集

    信息收集 1.厂商域名   2.厂商ip段   3.厂商业务信息 域名收集 1.基于SSL证书查询   2.第三方网站接口查询   3.Github   4.DNS解析记录   5.子域名枚举等 基于 ...

  8. LeetCode - 24、两两交换链表中的节点

    给定一个链表,两两交换其中相邻的节点,并返回交换后的链表.你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4, 你应该返回 2-> ...

  9. JDK1.8 java.io.Serializable接口详解

    java.io.Serializable接口是一个标志性接口,在接口内部没有定义任何属性与方法.只是用于标识此接口的实现类可以被序列化与反序列化.但是它的奥秘并非像它表现的这样简单.现在从以下几个问题 ...

  10. postgres linux系统下连接方法

    psql -U 用户名 -h ip  -p 端口号 -w 库名称 查询实例下的数据结构 语法:select 字段名  from  实例名“.”表名(account.tb_user) 如:  selec ...