一、java请求第三方接口
在Java中请求第三方接口通常涉及使用HTTP客户端库来发起请求并处理响应。以下是几种常用的Java库来实现这一目的,包括使用Spring Boot框架和不使用Spring Boot框架的方法。
1. 使用 HttpURLConnection (适用于不使用Spring的Java应用程序)
HttpURLConnection 是Java标准库的一部分,可以用来发送HTTP请求。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpClientExample {
public static void main(String[] args) throws Exception {
String url = "https://api.example.com/data";
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
// Optional default is GET
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
System.out.println("Response Code : " + responseCode);
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// Print result
System.out.println(response.toString());
}
}
2. 使用 OkHttp (适用于不使用Spring的Java应用程序)
OkHttp 是一个高效的HTTP客户端库,非常适合于Android和Java应用程序。
添加依赖:
<!-- Maven -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.1</version>
</dependency>
示例代码:
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class OkHttpClientExample {
public static void main(String[] args) throws Exception {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://api.example.com/data")
.build();
try (Response response = client.newCall(request).execute()) {
System.out.println(response.body().string());
}
}
}
3. 使用 HttpClient (适用于不使用Spring的Java应用程序)
Java 11 引入了新的 HttpClient API,这是一个非阻塞的客户端,适用于现代的高并发应用。
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class HttpClientExample {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://api.example.com/data"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
4. 使用 RestTemplate (适用于Spring Boot应用程序)
如果你正在使用Spring Boot或Spring框架,RestTemplate是一个非常好的选择。示例代码:
import org.springframework.web.client.RestTemplate;
public class SpringRestTemplateExample {
public static void main(String[] args) {
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject("https://api.example.com/data", String.class);
System.out.println(result);
}
}
5. 使用 WebClient (适用于Spring Boot应用程序)
WebClient 是Spring WebFlux中的非阻塞客户端,适用于现代Web服务。
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
public class SpringWebClientExample {
public static void main(String[] args) {
WebClient client = WebClient.create();
Mono<String> result = client.get()
.uri("https://api.example.com/data")
.retrieve()
.bodyToMono(String.class);
result.subscribe(System.out::println);
}
}
备注:
- 根据API的要求,你可能需要设置请求头,如 Authorization、Content-Type 等。
- 处理异常和错误情况,比如网络问题、超时等。
- 如果API需要身份验证,确保正确配置请求头或URL参数。
二、springboot请求第三方接口
在Spring Boot应用中调用第三方API(即第三方接口)是一种常见的场景,这通常涉及到HTTP请求的发送和响应的处理。Spring Boot提供了几种不同的方式来实现这一目标,下面我将介绍其中的一些方法:
1. 使用RestTemplate
RestTemplate是Spring框架中一个非常强大的工具类,用于发送HTTP请求并接收响应数据。下面是一个简单的示例,展示如何使用RestTemplate调用一个GET类型的API。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class ExternalApiController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/call-api")
public String callExternalApi() {
String url = "https://api.example.com/data";
ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
return response.getBody();
}
}
2. 使用WebClient
WebClient是Spring WebFlux项目中的非阻塞异步客户端,适用于现代Web服务。如果你的应用是基于Spring WebFlux的,那么WebClient是一个很好的选择。
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;
@RestController
public class ExternalApiController {
@GetMapping("/call-api")
public Mono<String> callExternalApi() {
WebClient client = WebClient.create();
return client.get()
.uri("https://api.example.com/data")
.retrieve()
.bodyToMono(String.class);
}
}
3. 使用HttpClient和HttpRequest
如果需要更底层的控制,可以使用HttpClient和HttpRequest,这通常适用于对HTTP协议有更深入需求的情况。
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ExternalApiController {
@GetMapping("/call-api")
public String callExternalApi() throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://api.example.com/data"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
return response.body();
}
}
备注:
- 确保你的Spring Boot应用中包含了相应的依赖(例如spring-web或spring-webflux)。
- 如果API需要认证或有特殊的请求头,记得在请求中添加相应的信息。
- 处理异常和错误情况,比如网络问题、超时等。