001 okhttp3的POST使用
继续使用上面的项目
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使用的更多相关文章
- Okhttp3的简单使用
1.get请求: /** * *okhttp get请求 * */ public class MainActivity extends AppCompatActivity { private stat ...
- swift 001
swift 001 = 赋值是没有返回值的 所以 int a=10; int b=20; if(a=b){ printf("这个是错误的"); } swift 中的模运算 是支 ...
- okhttp3 post 数据打包方法
import okhttp3.OkHttpClient; import okhttp3.FormBody; import okhttp3.Request; import okhttp3.Request ...
- [SDK2.2]Windows Azure Virtual Network (4) 创建Web Server 001并添加至Virtual Network
<Windows Azure Platform 系列文章目录> 在上一章内容中,笔者已经介绍了以下两个内容: 1.创建Virtual Network,并且设置了IP range 2.创建A ...
- Retrofit2 + OkHttp3设置Http请求头(Headers)方法汇总
在构建网络层时会遇到一个问题就是要手动配置Http请求的Headers,写入缓存Cookie,自定义的User-Agent等参数,但是对于有几十个接口的网络层,我才不想用注解配置Headers,目前网 ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数001·3D函数
<zw版·Halcon-delphi系列原创教程> Halcon分类函数001·3D函数 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“proce ...
- Android 开发错误信息001
Error:Execution failed for task ':app:dexDebug'. > com.android.ide.common.process.ProcessExceptio ...
- okhttp3 get post 简单封装
最近打算在新项目中使用 okhttp3, 简单封装了一下异步 get post 因为 CallBack 也是在子线程中执行,所以用到了 Handler public class MyOkHttpCli ...
- okhttp3教程(1)如何引入库
官网: https://github.com/square/okhttp https://github.com/square/okio 1,使用okhttp3需要两个库 在build.gradle c ...
随机推荐
- 【技巧】如何使用客户端发布BLOG+如何快速发布微信公众号文章
[技巧]如何使用客户端发布BLOG+如何快速发布微信公众号文章 1 BLOG文档结构图 2 前言部分 2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也 ...
- jquery.widget开发(1)
jquery.widget是挂件,通过挂件模式挂载在jquery对象上,其实本质上也就是用了$.fn.extend和$.extend的扩展. http://blog.sina.com.cn/s/blo ...
- jQuery知识梳理20190817
目录 jQuery知识梳理20190817 1. jQuery的特征 2. jQuery的两把利器 2.1 jQuery核心函数 2.2 jQuery核心对象 3. jQuery核心函数详解 4. j ...
- Flask入门很轻松 (二)
转载请在文章开头附上原文链接地址:https://www.cnblogs.com/Sunzz/p/10959454.html 请求钩子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比 ...
- springboot2.1.3+jacoco检测代码覆盖率
关于 jacoco的介绍,不在本文中详细描述,简单点说,只是个代码覆盖率工具,想要了解具体的可以参考如下地址: https://www.jianshu.com/p/639e51c76544 好了,闲话 ...
- FreeBSD安装后使用su命令显示sorry的解决办法
FreeBSD中,可以使用su命令成为root用户,但FreeBSD对执行su命令的用户进行了更严格的限制,能使用su命令的用户必须属于wheel组(root的基本属组,组ID为0),否则就不能通过 ...
- Termux和Ubuntu建立ssh连接
1 本机环境 Android:Termux v0.77 作为客户端 Linux:Ubuntu 19.10 作为服务器 两者处于同一局域网下 2 ssh安装 2.1 Termux pkg install ...
- ubifs使用方法
常用命令: 查看块设备分区信息cat /proc/mtd 查看块设备信息mtdinfo /dev/mtd0 格式化mtd分区ubiformat /dev/mtd0 将mtd分区与ubi关联ubiatt ...
- vue2 design 手记
Ant Design of Vue github地址:https://github.com/vueComponent/ant-design-vue Ant Design of Vue文档:https: ...
- linux查看redis安装目录
1.在redis下查看安装目录 如果命令 which 和whereis 都找不到安装目录,可使用以下办法 ps -ef|grep redis 得到了进程号 xxxx 然后 ls -l /proc/xx ...