在 Java 中处理网络请求,常见方式取决于你是在写客户端(调用别人接口)还是写服务端(提供接口)。下面分场景讲清楚。
HttpURLConnection(JDK 原生,不推荐新项目)适合简单场景,代码偏底层。
URL url = new URL("https://api.example.com/data");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
BufferedReader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
StringBuilder result = new StringBuilder();
while ((line = reader.readLine()) != null) {
result.append(line);
}
reader.close();
System.out.println(result);
✅ 优点:无需依赖
❌ 缺点:代码繁琐、功能少
HttpClient(Java 11+ 推荐 ✅)现代、异步支持、API 清晰。
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/data"))
.build();
HttpResponse<String> response =
client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
POST 示例:
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/login"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString("{\"user\":\"admin\"}"))
.build();
✅ 推荐新项目使用
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://api.example.com/data")
.build();
Response response = client.newCall(request).execute();
System.out.println(response.body().string());
CloseableHttpClient client = HttpClients.createDefault();
HttpGet get = new HttpGet("https://api.example.com/data");
CloseableHttpResponse response = client.execute(get);
✅ 企业项目常见
RestTemplate / WebClientRestTemplate rest = new RestTemplate();
String result = rest.getForObject(
"https://api.example.com/data", String.class);
WebClient client = WebClient.create();
client.get()
.uri("https://api.example.com/data")
.retrieve()
.bodyToMono(String.class)
.subscribe(System.out::println);
@RestController
public class DemoController {
@GetMapping("/hello")
public String hello() {
return "Hello";
}
}
✅ 自动处理 HTTP、JSON、路由
ServerSocket server = new ServerSocket(8080);
Socket socket = server.accept();
❌ 不推荐业务开发
✅ 超时设置(很重要)
client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(5))
.build();
✅ 异常处理
✅ HTTPS
| 场景 | 推荐 |
|---|---|
| Java 11+ 新项目 | HttpClient |
| Spring 项目 | RestTemplate / WebClient |
| 高并发 / 异步 | WebClient / OkHttp |
| 简单脚本 | HttpURLConnection |
如果你愿意,可以告诉我:
我可以直接给你可运行示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。