您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# SpringBoot怎么调用Python接口
在现代应用开发中,多语言协作已成为常态。SpringBoot作为Java生态的主流框架,常需与Python服务交互。本文将介绍三种主流调用方式,并提供完整代码示例。
## 一、HTTP API调用(推荐)
这是最通用的跨语言通信方案:
```java
// SpringBoot中使用RestTemplate调用Python接口
@RestController
public class PythonController {
@GetMapping("/call-python")
public String callPythonService() {
RestTemplate restTemplate = new RestTemplate();
String pythonUrl = "http://localhost:5000/api/process";
// 设置请求参数
Map<String, String> params = new HashMap<>();
params.put("data", "testData");
// 发送POST请求
ResponseEntity<String> response = restTemplate.postForEntity(
pythonUrl,
params,
String.class
);
return response.getBody();
}
}
Python端可使用Flask快速创建接口:
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/api/process', methods=['POST'])
def process():
data = request.json.get('data')
return jsonify({"result": f"Processed {data}"})
if __name__ == '__main__':
app.run(port=5000)
适合需要直接执行Python脚本的场景:
import org.python.util.PythonInterpreter;
public class JythonExample {
public static void main(String[] args) {
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec("print('Hello from Python!')");
interpreter.execfile("script.py");
}
}
注意:仅支持Python2.x且功能有限
使用RabbitMQ实现异步通信:
// SpringBoot配置
@Bean
public Queue pythonQueue() {
return new Queue("python.task");
}
// 发送消息
@Autowired
private RabbitTemplate rabbitTemplate;
public void sendToPython(String message) {
rabbitTemplate.convertAndSend("python.task", message);
}
Python消费者示例:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='python.task')
def callback(ch, method, properties, body):
print(f"Received {body}")
channel.basic_consume('python.task', callback, auto_ack=True)
channel.start_consuming()
方式 | 延迟 | 复杂度 | 适用场景 |
---|---|---|---|
HTTP API | 中 | 低 | 通用场景 |
Jython | 低 | 高 | 简单脚本 |
消息队列 | 高 | 中 | 异步任务/大数据量 |
最佳实践建议: 1. 优先选择HTTP RESTful API 2. 复杂数据处理建议使用消息队列 3. 避免直接进程调用(ProcessBuilder)方式
注意:跨语言调用时需统一数据序列化格式(推荐JSON),并做好异常处理。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。