首页 > 解决方案 > 使用 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();

标签: pythonjavaspring-boothttp-posthttprequest

解决方案


不是最好的解决方案,但我设法将所有整数发送到我的烧瓶 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'))

如果您有更好的解决方案,请与我分享!


推荐阅读