继续使用上面的项目

1.被调用的项目

  1. package com.jun.web2forokhttp.okhttp;
  2.  
  3. import com.jun.web2forokhttp.bean.HttpDomain;
  4. import org.springframework.web.bind.annotation.*;
  5.  
  6. import java.util.HashMap;
  7. import java.util.Map;
  8.  
  9. @RestController
  10. public class PostReq {
  11. @PostMapping(value = "/post/getInfo")
  12. @ResponseBody
  13. public HttpDomain getInfo(@RequestBody HttpDomain httpDomain){
  14. HttpDomain useHttpDomain =new HttpDomain();
  15. useHttpDomain.setType(httpDomain.getType()+"-post");
  16. useHttpDomain.setAge(httpDomain.getAge()+10);
  17. return useHttpDomain;
  18. }
  19. }

  bean:

  1. package com.jun.web2forokhttp.bean;
  2.  
  3. import lombok.Data;
  4.  
  5. @Data
  6. public class HttpDomain {
  7. private String type;
  8. private String name;
  9. private String age;
  10. }

  

2.调用的程序

  1. package com.jun.web.okhttp;
  2.  
  3. import com.fasterxml.jackson.core.JsonProcessingException;
  4. import com.fasterxml.jackson.databind.ObjectMapper;
  5. import com.jun.web.okhttp.bean.HttpDomain;
  6. import com.jun.web.okhttp.bean.HttpResponseDomain;
  7. import okhttp3.*;
  8.  
  9. import java.io.IOException;
  10.  
  11. public class PostHttp {
  12. public static void main(String[] args) throws JsonProcessingException {
  13. formBody();
  14. }
  15.  
  16. /**
  17. * 没有请求头的请求
  18. */
  19. public static void formBody() throws JsonProcessingException {
  20. HttpDomain httpDomain = new HttpDomain();
  21. httpDomain.setType("1");
  22. httpDomain.setName("tom");
  23. httpDomain.setAge(10);
  24. ObjectMapper objectMapper = new ObjectMapper();
  25. String Json=objectMapper.writeValueAsString(httpDomain); //转JSON
  26.  
  27. String url = "http://localhost:8080/post/getInfo";
  28. OkHttpClient okHttpClient = new OkHttpClient();
  29. MediaType json = MediaType.parse("application/json; charset=utf-8");
  30. RequestBody body = RequestBody.create(json,Json);
  31. Request request = new Request.Builder()
  32. .url(url)
  33. .post(body)
  34. .build();
  35.  
  36. Call call = okHttpClient.newCall(request);
  37. try{
  38. Response response = call.execute();
  39. String result = response.body().string();
  40. System.out.println("post="+result);
  41. HttpResponseDomain httpResponseDomain = objectMapper.readValue(result,HttpResponseDomain.class); //转对象
  42. System.out.println("httpResponseDomain="+httpResponseDomain);
  43. } catch (IOException e) {
  44. e.printStackTrace();
  45. }
  46. }
  47. }

  需要的bean

  1. package com.jun.web.okhttp.bean;
  2.  
  3. import lombok.Data;
  4.  
  5. import java.io.Serializable;
  6.  
  7. @Data
  8. public class HttpDomain implements Serializable{
  9. private String type;
  10. private String name;
  11. private int age;
  12. }

  

  1. package com.jun.web.okhttp.bean;
  2.  
  3. import lombok.Builder;
  4. import lombok.Data;
  5.  
  6. @Data
  7. @Builder
  8. public class HttpResponseDomain {
  9. private String type;
  10. private String age;
  11. private String name;
  12. public HttpResponseDomain(){}
  13. public HttpResponseDomain(String type,String age,String name){
  14. this.type=type;
  15. this.age=age;
  16. this.name=name;
  17. }
  18. // private String name;
  19. }

  

3.效果

  

二:注意点

1.RequestBody的数据格式

  常见的content-type主要有三种

    application/x-www-form-urllencoded

    application/form-data

    application/json

  上文的示例就是json格式。

2.如果数据包含文件

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

三:同步与异步

1.异步

  1. package com.jun.web.okhttp;
  2.  
  3. import okhttp3.*;
  4.  
  5. import java.io.IOException;
  6.  
  7. public class Asyn {
  8. public static void main(String[] args) {
  9. String url = "https://www.baidu.com/";
  10. OkHttpClient okHttpClient = new OkHttpClient();
  11. Request request = new Request.Builder()
  12. .url(url)
  13. .build();
  14. Call call = okHttpClient.newCall(request);
  15. call.enqueue(new Callback() {
  16. @Override
  17. public void onFailure(Call call, IOException e) {
  18. e.printStackTrace();
  19. }
  20.  
  21. @Override
  22. public void onResponse(Call call, Response response) throws IOException {
  23. System.out.println("我是异步线程,线程Id为:" + Thread.currentThread().getId());
  24. }
  25. });
  26. for (int i = 0; i < 10; i++) {
  27. System.out.println("我是主线程,线程Id为:" + Thread.currentThread().getId());
  28. try {
  29. Thread.currentThread().sleep(100);
  30. } catch (InterruptedException e) {
  31. e.printStackTrace();
  32. }
  33. }
  34. }
  35. }

  效果

  

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. 【技巧】如何使用客户端发布BLOG+如何快速发布微信公众号文章

    [技巧]如何使用客户端发布BLOG+如何快速发布微信公众号文章   1  BLOG文档结构图     2  前言部分   2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也 ...

  2. jquery.widget开发(1)

    jquery.widget是挂件,通过挂件模式挂载在jquery对象上,其实本质上也就是用了$.fn.extend和$.extend的扩展. http://blog.sina.com.cn/s/blo ...

  3. jQuery知识梳理20190817

    目录 jQuery知识梳理20190817 1. jQuery的特征 2. jQuery的两把利器 2.1 jQuery核心函数 2.2 jQuery核心对象 3. jQuery核心函数详解 4. j ...

  4. Flask入门很轻松 (二)

    转载请在文章开头附上原文链接地址:https://www.cnblogs.com/Sunzz/p/10959454.html 请求钩子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比 ...

  5. springboot2.1.3+jacoco检测代码覆盖率

    关于 jacoco的介绍,不在本文中详细描述,简单点说,只是个代码覆盖率工具,想要了解具体的可以参考如下地址: https://www.jianshu.com/p/639e51c76544 好了,闲话 ...

  6. FreeBSD安装后使用su命令显示sorry的解决办法

    FreeBSD中,可以使用su命令成为root用户,但FreeBSD对执行su命令的用户进行了更严格的限制,能使用su命令的用户必须属于wheel组(root的基本属组,组ID为0),否则就不能通过 ...

  7. Termux和Ubuntu建立ssh连接

    1 本机环境 Android:Termux v0.77 作为客户端 Linux:Ubuntu 19.10 作为服务器 两者处于同一局域网下 2 ssh安装 2.1 Termux pkg install ...

  8. ubifs使用方法

    常用命令: 查看块设备分区信息cat /proc/mtd 查看块设备信息mtdinfo /dev/mtd0 格式化mtd分区ubiformat /dev/mtd0 将mtd分区与ubi关联ubiatt ...

  9. vue2 design 手记

    Ant Design of Vue github地址:https://github.com/vueComponent/ant-design-vue Ant Design of Vue文档:https: ...

  10. linux查看redis安装目录

    1.在redis下查看安装目录 如果命令 which 和whereis 都找不到安装目录,可使用以下办法 ps -ef|grep redis 得到了进程号 xxxx 然后 ls -l /proc/xx ...