我有一个简单的 Flask API:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
@app.route('/add/<params>', methods = ['GET'])
def add_numbers(params):
#params is expected to be a dictionary: {'x': 1, 'y':2}
params = eval(params)
return jsonify({'sum': params['x'] + params['y']})
if __name__ == '__main__':
app.run(debug=True)
现在,我想从 Java 调用这个方法并提取结果。我尝试过使用java.net.URL和java.net.HttpURLConnection;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class MyClass {
public static void main(String[] args) {
try {
URL url = new URL("http://127.0.0.1:5000/add/{'x':100, 'y':1}");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
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 (MalformedURLException e) {
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
}
}
但这不起作用。在烧瓶服务器中,我收到一条错误消息:
代码 400,消息请求语法错误(“GET /add/{'x':100, 'y':1} HTTP/1.1”)
“GET /add/{'x':100, 'y':1} HTTP/1.1” HTTPStatus.BAD_REQUEST -
在 Java 代码中,我收到错误:
线程“main”中的异常 java.lang.RuntimeException:失败:HTTP 错误代码:-1 在 MyClass.main(MyClass.java:17)
我究竟做错了什么?
我的最终目标是将字典对象传递给我的Python函数并将函数的响应返回给java。该词典可以包含超过一千个单词的文本值。我怎样才能实现这个目标?
鸿蒙传说
函数式编程
相关分类