核心思路
Python 用 Flask 提供 AI 模型 REST API
Java 通过 HTTP 请求 调用接口 → 解析 JSON → 得到 AI 预测结果
Java 调用 Flask AI 接口
通过 Flask REST API 调用
Python 端提供预测接口:
@app.route("/ai/predict", methods=["POST"])
defpredict():
data = request.json
result = model.predict([data["features"]])
return jsonify({"code":0, "prediction": int(result)})
Java 发送 HTTP 请求
HttpURLConnection(JDK 原生)
URLurl=newURL("http://localhost:5000/ai/predict");
HttpURLConnectionconn= (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
// 发送 JSON
Stringjson="{\"features\":[1,2,3]}";
try(OutputStreamos= conn.getOutputStream()) {
os.write(json.getBytes());
}
// 获取响应
try(BufferedReaderbr=newBufferedReader(newInputStreamReader(conn.getInputStream()))) {
Stringres= br.readLine();
}
HttpClient(JDK 11+ 原生)
HttpClientclient= HttpClient.newHttpClient();
HttpRequestrequest= HttpRequest.newBuilder()
.uri(URI.create("http://localhost:5000/ai/predict"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString("{\"features\":[1,2,3]}"))
.build();
HttpResponse<String> res = client.send(request, HttpResponse.BodyHandlers.ofString());
JSON 解析
把接口返回的 JSON 转为 Java 对象
Gson
Gsongson=newGson();
AiResponseresp= gson.fromJson(json, AiResponse.class);
Jackson
ObjectMappermapper=newObjectMapper();
AiResponseresp= mapper.readValue(json, AiResponse.class);
Fastjson
AiResponseresp= JSON.parseObject(json, AiResponse.class);
异步调用
使用 CompletableFuture 异步调用,不阻塞主线程
CompletableFuture.supplyAsync(() -> {
return httpClient.send(request, HttpResponse.BodyHandlers.ofString());
}).thenApply(response -> {
return gson.fromJson(response.body(), AiResponse.class);
}).thenAccept(result -> {
System.out.println(result.getPrediction());
});
连接池配置
OkHttp
OkHttpClientclient=newOkHttpClient.Builder()
.connectionPool(newConnectionPool(10, 5, TimeUnit.MINUTES))
.connectTimeout(5, TimeUnit.SECONDS)
.build();
Apache HttpClient
PoolingHttpClientConnectionManagerpool=newPoolingHttpClientConnectionManager();
pool.setMaxTotal(100);
pool.setDefaultMaxPerRoute(20);
重试与熔断(Resilience4j)
重试
Retryretry= Retry.of("ai-api", RetryConfig.custom()
.maxAttempts(3)
.waitDuration(Duration.ofSeconds(1))
.build());
CompletableFuture<String> future = Retry.decorateFuture(retry, this::callAiApi);
熔断
CircuitBreakerbreaker= CircuitBreaker.of("ai", CircuitBreakercConfig.custom()
.failureRateThreshold(50)
.waitDurationInOpenState(Duration.ofSeconds(10))
.build());
极简速记
- • Python Flask 提供 AI 接口,返回 JSON
- • Java 用 HttpClient / OkHttp 发送 POST 请求
- • Resilience4j 实现重试、熔断、高可用