Java HttpURLConnection не отправляет тело - PullRequest
2 голосов
/ 17 марта 2020

Я пытаюсь отправить запрос PUT с телом в мой API в моем приложении Android с Java. Я использую java.net HttpURLConnection, и запрос проходит. Но без тела.

Я снова и снова рефакторинг своего кода, но он все еще не работает, на данный момент у меня есть следующая задача:

@Override
protected String doInBackground(String... urls) {
      String result = "";
      URL url;
      HttpURLConnection urlConnection = null;
      JSONObject body = new JSONObject();
      try {
          body.put("title", title);
          body.put("content", content);
          try {
              url = new URL(urls[0]);
              urlConnection = (HttpURLConnection) url.openConnection();
              urlConnection.setRequestMethod("PUT");
              urlConnection.addRequestProperty("username", username);
              urlConnection.addRequestProperty("password", password);
              urlConnection.addRequestProperty("Content-Type", "application/json; utf-8");
              urlConnection.addRequestProperty("Accept", "application/json");
              urlConnection.setDoOutput(true);

              try(OutputStream os = urlConnection.getOutputStream()){
                  byte[] input = body.toString().getBytes("utf-8");
                  os.write(input, 0, input.length);
              }

              InputStream in = urlConnection.getInputStream();
              InputStreamReader reader = new InputStreamReader(in);
              int data = reader.read();
              while (data != -1){
                  char current = (char) data;
                  result += current;
                  data += current;
                  data = reader.read();
              }
              return result;
          }catch (Exception e){
              e.printStackTrace();
              return null;
          }
      } catch (JSONException e) {
          e.printStackTrace();
          return  null;
      }
}

Но этот код всегда приводит к пустое тело.

РЕДАКТИРОВАТЬ

При изменении типа контента на application/x-www-form-urlencoded сервер получает тело. Но так я не получаю файл JSON для дальнейшей обработки.

1 Ответ

0 голосов
/ 18 марта 2020

Код java работает правильно. API не принимает JSON. Другие языки работали без проблем.

Информация о сервере

  • Node.js
  • Express
  • Body Parser

Я не добавил app.use(bodyParser.json());

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...