SpringBoot okhtt工具类封装方式
作者:早起的年轻人
本文介绍了如何在SpringBoot项目中使用OkHttp工具类进行HTTP请求,并提供了一个封装了GET和POST方法的工具类示例,在Controller中使用该工具类时,需要注意OkHttpClient的静态初始化和异常处理
SpringBoot okhtt工具类封装
在 Spring Boot 项目中使用 OkHttp 可以方便地进行 HTTP 请求。
在pom.xml文件中添加 OkHttp 的依赖:
<dependencies> <!-- OkHttp --> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.9.3</version> </dependency> </dependencies>
以下是一个封装了常见 HTTP 请求方法(GET、POST)的 OkHttp 工具类示例
import okhttp3.*; import java.io.IOException; import java.util.Map; import java.util.concurrent.TimeUnit; /** * OkHttp 工具类,封装常见的 HTTP 请求方法 */ public class OkHttpUtils { private static final OkHttpClient client; static { // 初始化 OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) // 连接超时时间 .readTimeout(30, TimeUnit.SECONDS) // 读取超时时间 .writeTimeout(30, TimeUnit.SECONDS) // 写入超时时间 .build(); } /** * 发送 GET 请求 * * @param url 请求的 URL * @return 响应结果字符串 * @throws IOException 网络请求异常 */ public static String sendGetRequest(String url) throws IOException { Request request = new Request.Builder() .url(url) .build(); try (Response response = client.newCall(request).execute()) { if (response.isSuccessful() && response.body() != null) { return response.body().string(); } return null; } } /** * 发送带参数的 GET 请求 * * @param url 请求的 URL * @param params 请求参数 * @return 响应结果字符串 * @throws IOException 网络请求异常 */ public static String sendGetRequest(String url, Map<String, String> params) throws IOException { HttpUrl.Builder urlBuilder = HttpUrl.parse(url).newBuilder(); if (params != null) { for (Map.Entry<String, String> entry : params.entrySet()) { urlBuilder.addQueryParameter(entry.getKey(), entry.getValue()); } } String finalUrl = urlBuilder.build().toString(); return sendGetRequest(finalUrl); } /** * 发送 POST 请求,请求体为 JSON 格式 * * @param url 请求的 URL * @param jsonBody JSON 格式的请求体 * @return 响应结果字符串 * @throws IOException 网络请求异常 */ public static String sendPostRequest(String url, String jsonBody) throws IOException { MediaType JSON = MediaType.get("application/json; charset=utf-8"); RequestBody body = RequestBody.create(jsonBody, JSON); Request request = new Request.Builder() .url(url) .post(body) .build(); try (Response response = client.newCall(request).execute()) { if (response.isSuccessful() && response.body() != null) { return response.body().string(); } return null; } } /** * 发送 POST 请求,请求体为表单格式 * * @param url 请求的 URL * @param params 表单参数 * @return 响应结果字符串 * @throws IOException 网络请求异常 */ public static String sendPostFormRequest(String url, Map<String, String> params) throws IOException { FormBody.Builder formBodyBuilder = new FormBody.Builder(); if (params != null) { for (Map.Entry<String, String> entry : params.entrySet()) { formBodyBuilder.add(entry.getKey(), entry.getValue()); } } RequestBody formBody = formBodyBuilder.build(); Request request = new Request.Builder() .url(url) .post(formBody) .build(); try (Response response = client.newCall(request).execute()) { if (response.isSuccessful() && response.body() != null) { return response.body().string(); } return null; } } }
使用示例
以下是如何在 Spring Boot 的 Controller 中使用这个工具类:
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.io.IOException; import java.util.HashMap; import java.util.Map; @RestController @RequestMapping("/http") public class HttpController { @GetMapping("/get") public String getRequest() throws IOException { String url = "https://jsonplaceholder.typicode.com/todos/1"; return OkHttpUtils.sendGetRequest(url); } @GetMapping("/getWithParams") public String getRequestWithParams() throws IOException { String url = "https://jsonplaceholder.typicode.com/posts"; Map<String, String> params = new HashMap<>(); params.put("userId", "1"); return OkHttpUtils.sendGetRequest(url, params); } @GetMapping("/postJson") public String postJsonRequest() throws IOException { String url = "https://jsonplaceholder.typicode.com/posts"; String jsonBody = "{\"title\":\"foo\",\"body\":\"bar\",\"userId\":1}"; return OkHttpUtils.sendPostRequest(url, jsonBody); } @GetMapping("/postForm") public String postFormRequest() throws IOException { String url = "https://jsonplaceholder.typicode.com/posts"; Map<String, String> params = new HashMap<>(); params.put("title", "foo"); params.put("body", "bar"); params.put("userId", "1"); return OkHttpUtils.sendPostFormRequest(url, params); } }
注意事项
- 此工具类中的
OkHttpClient
是静态初始化的,在整个应用程序中共享一个实例,以提高性能和复用连接。 - 对于异常处理,当前示例只是简单地将
IOException
抛出,在实际应用中,你可能需要根据具体情况进行更详细的异常处理,例如记录日志、返回合适的错误信息等。 - 确保在使用时处理好可能的网络异常和超时情况,以保证应用程序的健壮性。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。