python - 使用 httpPost 从 Spring Boot 向 Python flask api 发送 POST 请求
问题描述
我想向我的 Python 烧瓶 api 发送一个整数数组。我在我的另一个后端 api (Spring Boot) 中编写了这段代码。我从来没有做过这样的事情,所以我不知道如何使用 httpPost 和 CloseableHttpClient 传递 int[] 参数。我的代码如下所示:
@PostMapping("/result")
public String getTestResult(@RequestBody Map<String,String> list) throws ClientProtocolException, IOException {
int[] answers = resultService.saveOrUpdate(list);
String stuid = list.get("0");
Optional<Student_Dim> student = studentService.getStudentInformation(Long.parseLong(stuid));
Optional<Location_Dim> location = locationService.getLocation(student.get().getLoc_code());
int[] allData = {answers[0],answers[1],answers[2],answers[3],answers[4],
answers[5],answers[6],answers[7],answers[8],answers[9],
answers[10],answers[11],answers[12],answers[13],answers[14],
answers[15],answers[16],answers[17],answers[18],answers[19],
student.get().getAge(),
location.get().getDensity(),
(int) location.get().getAverage_temp(),
location.get().getInvidualism_score()};
HashMap<String,int[]> mlData = new HashMap<String,int[]>();
mlData.put("data",allData);
CloseableHttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://127.0.0.1:5000/personality");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("data", allData));
CloseableHttpResponse response = client.execute(httpPost);
String responseString = new BasicResponseHandler().handleResponse(response);
System.out.println(responseString);
client.close();
//resultService.insertPersonality(stuid);
String personality = studentService.getPersonality(Long.parseLong(stuid));
return personality;
}
此代码的重要部分发生在 int[] allData 之后。你可以看到我试过了
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("data", allData));
但它说您不能将 String, int[] 传递给 BasicNameValuePair。我粘贴代码的请求部分以使其清楚:
CloseableHttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://127.0.0.1:5000/personality");
//List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
//nameValuePairs.add(new BasicNameValuePair("data", allData));
CloseableHttpResponse response = client.execute(httpPost);
String responseString = new BasicResponseHandler().handleResponse(response);
System.out.println(responseString);
client.close();
解决方案
不是最好的解决方案,但我设法将所有整数发送到我的烧瓶 api。我将其转换为字符串,然后将其发送并在 Python 代码中将其转换回 int。
HttpResponse response = Request.Post("http://127.0.0.1:5000/personality").bodyForm(
Form.form().add("answ1",Integer.toString(answers[0])).add("answ1",Integer.toString(answers[0]))
.add("answ0",Integer.toString(answers[0])).add("answ1",Integer.toString(answers[1]))
.add("answ2",Integer.toString(answers[2])).add("answ3",Integer.toString(answers[3]))
.add("answ4",Integer.toString(answers[4])).add("answ5",Integer.toString(answers[5]))
.add("answ6",Integer.toString(answers[6])).add("answ7",Integer.toString(answers[7]))
.add("answ8",Integer.toString(answers[8])).add("answ9",Integer.toString(answers[9]))
.add("answ10",Integer.toString(answers[10])).add("answ11",Integer.toString(answers[11]))
.add("answ12",Integer.toString(answers[12])).add("answ13",Integer.toString(answers[13]))
.add("answ14",Integer.toString(answers[14])).add("answ15",Integer.toString(answers[15]))
.add("answ16",Integer.toString(answers[16])).add("answ17",Integer.toString(answers[17]))
.add("answ18",Integer.toString(answers[18])).add("answ19",Integer.toString(answers[19]))
.add("age",Integer.toString(student.get().getAge()))
.add("gender",Integer.toString(student.get().getGender()))
.add("density",Integer.toString(location.get().getDensity()))
.add("avg_temp",Integer.toString((int) location.get().getAverage_temp()))
.add("invi_score",Integer.toString(location.get().getInvidualism_score()))
.add("gp_avg",Integer.toString((int)student.get().getGp_avg()))
.build())
.execute().returnResponse();
在 Python 中
answ1 = int(request.form.get('answ0'))
answ2 = int(request.form.get('answ1'))
answ3 = int(request.form.get('answ2'))
answ4 = int(request.form.get('answ3'))
answ5 = int(request.form.get('answ4'))
answ6 = int(request.form.get('answ5'))
answ7 = int(request.form.get('answ6'))
answ8 = int(request.form.get('answ7'))
answ9 = int(request.form.get('answ8'))
answ10 = int(request.form.get('answ9'))
answ11 = int(request.form.get('answ10'))
answ12 = int(request.form.get('answ11'))
answ13 = int(request.form.get('answ12'))
answ14 = int(request.form.get('answ13'))
answ15 = int(request.form.get('answ14'))
answ16 = int(request.form.get('answ15'))
answ17 = int(request.form.get('answ16'))
answ18 = int(request.form.get('answ17'))
answ19 = int(request.form.get('answ18'))
answ20 = int(request.form.get('answ19'))
age = int(request.form.get('age'))
gender = int(request.form.get('gender'))
density = int(request.form.get('density'))
avg_temp = int(request.form.get('avg_temp'))
individualism_score = int(request.form.get('invi_score'))
gp_avg = int(request.form.get('gp_avg'))
如果您有更好的解决方案,请与我分享!
推荐阅读
- javascript - Dynamically create part of JavaScript block in aspx page from code behind
- sql - 使用十进制输出 SQL Server 2008 减去下一行中的列值
- wix - Wix 安装程序不会建立在 VSTS 上
- javascript - iOS上jquery自动完成后的空$scope元素
- reactjs - 为什么我的样式在codesandbox中没有生效?
- git - 修复 Windows 中损坏的松散 Git 头
- dji-sdk - 调用 camera.setMode(DJICameraMode.shootPhoto) 时出错
- objective-c - 目标 C - 第一次添加图钉时注释标题(空),然后第二次正确显示注释
- wordpress - WordPress:如何自动生成图像的标题
- reactjs - HOC 渲染包装组件 + 附加组件