Java 中使用 OkHttpClent 请求接口 get方式 post方式

打印 上一主题 下一主题

主题 915|帖子 915|积分 2745

学习记录,不喜勿喷
什么是OkHttp

 一般在Java平台上,我们会使用Apache HttpClient作为Http客户端,用于发送 HTTP 请求,并对响应进行处理。比如可以使用http客户端与第三方服务(如SSO服务)进行集成,当然还可以爬取网上的数据等。OKHttp与HttpClient类似,也是一个Http客户端,提供了对 HTTP/2 和 SPDY 的支持,并提供了连接池,GZIP 压缩和 HTTP 响应缓存功能。
OkHttp优点

(1)支持HTTP2/SPDY(SPDY是Google开发的基于TCP的传输层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验)
(2)socket自动选择最好路线,并支持自动重连,拥有自动维护的socket连接池,减少握手次数,减少了请求延迟,共享Socket,减少对服务器的请求次数
(3)基于Headers的缓存策略减少重复的网络请求
(4)拥有Interceptors轻松处理请求与响应(自动处理GZip压缩)
OkHttp功能

(1)一般的get请求
(2)一般的post请求
(3)基于Http的文件上传
(4)文件下载
(5)上传下载的进度回调
(6)加载图片
(7)支持请求回调,直接返回对象、对象集合
(8)支持session的保持
(9)支持自签名网站https的访问,提供方法设置下证书就行
(10)支持取消某个请求
测试数据接口
  1. package com.waves.controller;
  2. import org.springframework.web.bind.annotation.*;
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. @RestController
  8. @RequestMapping("/dataApi")
  9. public class ResponseDataController {
  10.     @GetMapping("/getData")
  11.     public Map<String,Object> getData(@RequestParam("pageIndex")String pageIndex){
  12.         Map<String,Object>  map = new HashMap<>();
  13.         map.put("username","小明");
  14.         map.put("password","123456");
  15.         map.put("age","18");
  16.         map.put("endSchool","中国北京大学");
  17.         List<Map<String,Object>> list = new ArrayList<>();
  18.         list.add(map);
  19.         Map<String,Object>  map2 = new HashMap<>();
  20.         map2.put("total",list.size());
  21.         map2.put("code",200);
  22.         map2.put("data",list);
  23.         return map2;
  24.     }
  25.     @PostMapping("/postData")
  26.     public Map<String,Object> postData(@RequestBody  Map<String,Object> params){
  27.         Map<String,Object>  map = new HashMap<>();
  28.         map.put("username","小红");
  29.         map.put("password","123456");
  30.         map.put("age","18");
  31.         map.put("school","中国北京大学");
  32.         List<Map<String,Object>> list = new ArrayList<>();
  33.         list.add(map);
  34.         Map<String,Object>  map2 = new HashMap<>();
  35.         map2.put("total",list.size());
  36.         map2.put("code",200);
  37.         map2.put("data",list);
  38.         return map2;
  39.     }
  40. }
复制代码
OkHttp POST请求接口
  1. package com.waves.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import okhttp3.MediaType;
  4. import okhttp3.OkHttpClient;
  5. import okhttp3.Request;
  6. import okhttp3.Response;
  7. import org.springframework.web.bind.annotation.*;
  8. import java.io.IOException;
  9. import java.util.HashMap;
  10. import java.util.Map;
  11. @RestController
  12. @RequestMapping("/okHttpApi")
  13. public class OkHttpController {
  14.     @PostMapping("/okHttpPost")
  15.     public Map<String,Object> okHttpPost(@RequestBody Map<String,Object> params){
  16.         try {
  17.             //json字符串的两种形式
  18.             String k =  "{\n" +
  19.                     "\t"pageIndex": "1",\n" +
  20.                     "\t"pageSize": "10",\n" +
  21.                     "\t"userName": "xiaoming"\n" +
  22.                     "}";
  23.             JSONObject json2 =  new JSONObject();
  24.             json2.put("pageIndex","1");
  25.             json2.put("pageSize","20");
  26.             json2.put("userName","xiaoming");
  27.             //创建一个OkHttpClient
  28.             OkHttpClient client = new OkHttpClient();
  29.             //设置请求头
  30.             MediaType mediaType = MediaType.parse("application/json");
  31.             //请求体
  32.             okhttp3.RequestBody requestBody = okhttp3.RequestBody.create(mediaType,k);
  33.             //创建一个request
  34.             Request request = new Request.Builder()
  35.                             .post(requestBody)
  36.                             .url("http://localhost:8080/dataApi/postData")
  37.                             .addHeader("content-type","application/json")
  38.                             .build();
  39.             //获得返回
  40.             Response response = client.newCall(request).execute();
  41.             if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
  42.             //获取返回值
  43.             String responseData = response.body().string();
  44.             //将json字符串转为JSONObject
  45.             JSONObject data =   JSONObject.parseObject(responseData);
  46.             //将jsonObject 转为Map
  47.             Map<String,Object> map2 = data.toJavaObject(Map.class);
  48.             return map2;
  49.         }catch (Exception e){
  50.             return new HashMap<>();
  51.         }
  52.     }
  53. }
复制代码
OkHttp GET方式请求接口
  1.     @GetMapping("/okHttpGet")
  2.     public Map<String,Object> okHttpGet(@RequestBody Map<String,Object> params){
  3.         try {
  4.             OkHttpClient client = new OkHttpClient();
  5.             Request request = new Request.Builder()
  6.                     .get()
  7.                     .url("http://localhost:8080/dataApi/getData?pageIndex=1")
  8. //                    .addHeader("content-type","application/json")
  9.                     .build();
  10.             Response response = client.newCall(request).execute();
  11.             if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
  12.             //获取返回值
  13.             String responseData = response.body().string();
  14.             //将json字符串转为JSONObject
  15.             JSONObject data =   JSONObject.parseObject(responseData);
  16.             //将jsonObject 转为Map
  17.             Map<String,Object> map2 = data.toJavaObject(Map.class);
  18.             return map2;
  19.         }catch (Exception e){
  20.             return new HashMap<>();
  21.         }
  22.     }
复制代码
 
 项目所需pom(依赖)
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4.     <modelVersion>4.0.0</modelVersion>
  5.     <groupId>com.waves</groupId>
  6.     <artifactId>waves_okhttp</artifactId>
  7.     <version>0.0.1-SNAPSHOT</version>
  8.     <name>waves_okhttp</name>
  9.     <description>Okhtp project for Spring Boot</description>
  10.     <properties>
  11.         <java.version>1.8</java.version>
  12.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  13.         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  14.         <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
  15.     </properties>
  16.     <dependencies>
  17.         <dependency>
  18.             <groupId>org.springframework.boot</groupId>
  19.             <artifactId>spring-boot-starter-web</artifactId>
  20.         </dependency>
  21.         <dependency>
  22.             <groupId>com.alibaba</groupId>
  23.             <artifactId>fastjson</artifactId>
  24.             <version>1.2.72</version>
  25.         </dependency>
  26.         
  27.         <dependency>
  28.             <groupId>com.squareup.okhttp3</groupId>
  29.             <artifactId>okhttp</artifactId>
  30.             <version>4.9.1</version>
  31.         </dependency>
  32.         <dependency>
  33.             <groupId>org.springframework.boot</groupId>
  34.             <artifactId>spring-boot-starter-test</artifactId>
  35.             <scope>test</scope>
  36.             <exclusions>
  37.                 <exclusion>
  38.                     <groupId>org.junit.vintage</groupId>
  39.                     <artifactId>junit-vintage-engine</artifactId>
  40.                 </exclusion>
  41.             </exclusions>
  42.         </dependency>
  43.         <dependency>
  44.             <groupId>junit</groupId>
  45.             <artifactId>junit</artifactId>
  46.             <scope>test</scope>
  47.         </dependency>
  48.     </dependencies>
  49.     <dependencyManagement>
  50.         <dependencies>
  51.             <dependency>
  52.                 <groupId>org.springframework.boot</groupId>
  53.                 <artifactId>spring-boot-dependencies</artifactId>
  54.                 <version>${spring-boot.version}</version>
  55.                 <type>pom</type>
  56.                 <scope>import</scope>
  57.             </dependency>
  58.         </dependencies>
  59.     </dependencyManagement>
  60.     <build>
  61.         <plugins>
  62.             <plugin>
  63.                 <groupId>org.apache.maven.plugins</groupId>
  64.                 <artifactId>maven-compiler-plugin</artifactId>
  65.                 <version>3.8.1</version>
  66.                 <configuration>
  67.                     <source>1.8</source>
  68.                     <target>1.8</target>
  69.                     <encoding>UTF-8</encoding>
  70.                 </configuration>
  71.             </plugin>
  72.             <plugin>
  73.                 <groupId>org.springframework.boot</groupId>
  74.                 <artifactId>spring-boot-maven-plugin</artifactId>
  75.                 <version>2.3.7.RELEASE</version>
  76.                 <configuration>
  77.                     <mainClass>com.waves.WavesOkhttpApplication</mainClass>
  78.                 </configuration>
  79.                 <executions>
  80.                     <execution>
  81.                         <id>repackage</id>
  82.                         <goals>
  83.                             <goal>repackage</goal>
  84.                         </goals>
  85.                     </execution>
  86.                 </executions>
  87.             </plugin>
  88.         </plugins>
  89.     </build>
  90. </project>
复制代码
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

杀鸡焉用牛刀

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表