继续使用上面的项目

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. ETL讲解

    ETL是将业务系统的数据经过抽取.清洗转换之后加载到数据仓库的过程,目的是将企业中的分散.零乱.标准不统一的数据整合到一起,为企业的决策提供分析依据. ETL是BI项目重要的一个环节. 通常情况下,在 ...

  2. golang中逗号ok模式_转

    ,ok,第一个参数是一个值或者nil,第二个参数是true/false或者一个错误error.在一个需要赋值的if条件语句中,使用这种模式去检测第二个参数值会让代码显得优雅简洁.这种模式在go语言编码 ...

  3. bug集锦------持续但不定期 更新

    对于个人而言:这个错误集锦是很有必要的. 为了避免误导他人,其中个人想法:用 紫色加粗 标注. 1.springboot端口冲突: Protocol handler start failed2.spr ...

  4. Python入门篇-数据结构堆排序Heap Sort

    Python入门篇-数据结构堆排序Heap Sort 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.堆Heap 堆是一个完全二叉树 每个非叶子结点都要大于或者等于其左右孩子结点 ...

  5. 【转载】lr运行时设置,每个action 比例

    提供了再脚本运行时所需要的相关选项. 性能测试的关键之一:能否通过脚本来完全模拟用户的行为,可以通过运行设置让脚本运行的更人性化. 1. Run Logic 脚本如何运行,每个action与actio ...

  6. (转)python自动化测试之异常及日志

    为了保持自动化测试用例的健壮性,异常的捕获及处理,日志的记录对掌握自动化测试执行情况尤为重要,这里便详细的介绍下在自动化测试中使用到的异常及日志,并介绍其详细的用法. 一.日志 打印日志是很多程序的重 ...

  7. php读取外部txt文件内容并打印在页面|fopen()函数

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  8. SpringMVC_原理(转)

    在整个Spring MVC框架中,DispatcherServlet处于核心位置,它负责协调和组织不同组件完成请求处理并返回响应的工作.具体流程为:1)客户端发送http请求,web应用服务器接收到这 ...

  9. Linear Discriminant Analysis Algorithm

    线性判别分析算法. 逻辑回归是一种分类算法,传统上仅限于两类分类问题. 如果有两个以上的类,那么线性判别分析算法是首选的线性分类技术.LDA的表示非常直接.它包括数据的统计属性,为每个类计算.对于单个 ...

  10. LeetCode 935. Knight Dialer

    原题链接在这里:https://leetcode.com/problems/knight-dialer/ 题目: A chess knight can move as indicated in the ...