简介:本文详细讲解Java调用API接口的核心方法,涵盖HTTP客户端选择、请求构建、响应处理、安全认证及错误处理,通过代码示例和最佳实践帮助开发者高效实现API集成。
API(Application Programming Interface)是不同软件系统之间交互的桥梁,Java通过HTTP协议与RESTful API通信成为现代应用开发的标配。Java调用API接口的本质是通过HTTP客户端发送请求并处理响应,核心流程包括:选择HTTP客户端库、构建请求(URL、方法、头信息、参数)、发送请求、解析响应(状态码、响应体、头信息)。
import java.io.*;import java.net.HttpURLConnection;import java.net.URL;public class HttpUrlConnectionExample {public static void main(String[] args) {try {URL url = new URL("https://api.example.com/data");HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");connection.setRequestProperty("Accept", "application/json");int responseCode = connection.getResponseCode();if (responseCode == HttpURLConnection.HTTP_OK) {BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String inputLine;StringBuilder response = new StringBuilder();while ((inputLine = in.readLine()) != null) {response.append(inputLine);}in.close();System.out.println(response.toString());} else {System.out.println("GET请求失败,响应码:" + responseCode);}} catch (Exception e) {e.printStackTrace();}}}
关键点:手动设置请求方法、头信息,处理输入流,需显式关闭资源。
import org.apache.http.HttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.util.EntityUtils;public class ApacheHttpClientExample {public static void main(String[] args) {try (CloseableHttpClient httpClient = HttpClients.createDefault()) {HttpGet request = new HttpGet("https://api.example.com/data");request.addHeader("Accept", "application/json");HttpResponse response = httpClient.execute(request);int statusCode = response.getStatusLine().getStatusCode();if (statusCode == 200) {String responseBody = EntityUtils.toString(response.getEntity());System.out.println(responseBody);} else {System.out.println("请求失败,状态码:" + statusCode);}} catch (Exception e) {e.printStackTrace();}}}
优势:自动管理连接,支持连接池,API更简洁。
import org.springframework.web.client.RestTemplate;import org.springframework.http.ResponseEntity;public class RestTemplateExample {public static void main(String[] args) {RestTemplate restTemplate = new RestTemplate();String url = "https://api.example.com/data";ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);if (response.getStatusCodeValue() == 200) {System.out.println(response.getBody());} else {System.out.println("请求失败,状态码:" + response.getStatusCodeValue());}}}
配置优化:可通过RestTemplateBuilder设置超时、拦截器等。
import org.springframework.web.reactive.function.client.WebClient;import reactor.core.publisher.Mono;public class WebClientExample {public static void main(String[] args) {WebClient webClient = WebClient.create("https://api.example.com");Mono<String> response = webClient.get().uri("/data").header("Accept", "application/json").retrieve().bodyToMono(String.class);response.subscribe(System.out::println, Throwable::printStackTrace);// 需等待异步结果,实际项目中通常结合其他响应式组件}}
适用场景:高并发、非阻塞IO、与Spring WebFlux集成。
Authorization头传递Base64(username:password)。AuthorizationCodeGrant或ClientCredentialsGrant获取Token。
// Apache HttpClient重试示例RequestConfig config = RequestConfig.custom().setConnectTimeout(5000).setSocketTimeout(5000).build();CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(config).setRetryHandler((exception, executionCount, context) -> {if (executionCount >= 3) {return false;}if (exception instanceof ConnectTimeoutException) {return true;}return false;}).build();
SSLContext忽略证书验证(仅测试环境)。
// OkHttp超时配置OkHttpClient client = new OkHttpClient.Builder().connectTimeout(10, TimeUnit.SECONDS).writeTimeout(10, TimeUnit.SECONDS).readTimeout(30, TimeUnit.SECONDS).build();
通过掌握上述方法,开发者可以高效、安全地实现Java与各类API的集成,为应用赋予强大的外部服务能力。