RESTful API是基于REST(Representational State Transfer)架构风格的Web服务接口,它使用HTTP协议的标准方法(GET, POST, PUT, DELETE等)来操作资源。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class RestClient {
public static void main(String[] args) {
try {
URL url = new URL("https://api.example.com/users");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String output;
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null) {
System.out.println(output);
}
conn.disconnect();
} 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/users");
HttpResponse response = httpClient.execute(request);
System.out.println("Status code: " + response.getStatusLine().getStatusCode());
String result = EntityUtils.toString(response.getEntity());
System.out.println("Response: " + result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
import org.springframework.web.client.RestTemplate;
public class RestTemplateExample {
public static void main(String[] args) {
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject("https://api.example.com/users", String.class);
System.out.println(result);
}
}
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> result = webClient.get()
.uri("/users")
.retrieve()
.bodyToMono(String.class);
System.out.println(result.block());
}
}
原因:网络问题或服务器响应慢 解决:设置合理的超时时间
// 使用HttpURLConnection
conn.setConnectTimeout(5000); // 5秒
conn.setReadTimeout(5000);
// 使用HttpClient
RequestConfig config = RequestConfig.custom()
.setConnectTimeout(5000)
.setSocketTimeout(5000)
.build();
原因:自签名证书或证书不受信任 解决:自定义SSL上下文
import javax.net.ssl.*;
import java.security.cert.X509Certificate;
// 创建信任所有证书的SSL上下文
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, new TrustManager[]{new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) {}
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) {}
public X509Certificate[] getAcceptedIssuers() { return null; }
}}, new java.security.SecureRandom());
// 使用自定义SSL上下文
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true);
原因:需要将JSON字符串转换为Java对象 解决:使用JSON库如Jackson或Gson
// 使用Jackson
ObjectMapper mapper = new ObjectMapper();
User[] users = mapper.readValue(jsonString, User[].class);
// 使用Gson
Gson gson = new Gson();
User[] users = gson.fromJson(jsonString, User[].class);
原因:API需要认证 解决:添加认证头
// Basic认证
String auth = "username:password";
byte[] encodedAuth = Base64.getEncoder().encode(auth.getBytes(StandardCharsets.UTF_8));
String authHeader = "Basic " + new String(encodedAuth);
connection.setRequestProperty("Authorization", authHeader);
// Bearer Token认证
connection.setRequestProperty("Authorization", "Bearer " + token);
通过以上方法和实践,可以在Java应用中高效、安全地使用RESTful API。
没有搜到相关的文章