Как построить тело запроса в формате json - PullRequest
0 голосов
/ 07 апреля 2020

Вот запрос, по которому я должен позвонить: перечисление содержимого библиотеки

GET https://photoslibrary.googleapis.com/v1/mediaItems Тип контента: application / json Авторизация: Bearer oauth2 -token {"pageSize": "100",}

Вот что я попробовал:

public String getJSON(String url, int timeout) {
        String body1 = "{pageSize: 100,}";
        String body2 = "{\"pageSize\": \"100\",}";
        HttpURLConnection request = null;
        try {
            URL u = new URL(url);
            request = (HttpURLConnection) u.openConnection();

            request.setRequestMethod("GET");
            request.setRequestProperty("Authorization", "Bearer " + token);
            request.setRequestProperty("Content-Type", "application/json; charset=UTF-8");

            request.setUseCaches(false);
            request.setAllowUserInteraction(false);
            request.setConnectTimeout(timeout);
            request.setReadTimeout(timeout);
            request.setRequestProperty("Content-Length", String.format(Locale.ENGLISH, "%d", body2.getBytes().length));
            OutputStream outputStream = request.getOutputStream();
            outputStream.write(body2.getBytes());
            outputStream.close();
            request.connect();
            int status = request.getResponseCode();

            switch (status) {
                case 200:
                case 201:
                    BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));
                    StringBuilder sb = new StringBuilder();
                    String line;
                    while ((line = br.readLine()) != null) {
                        sb.append(line+"\n");
                    }
                    br.close();
                    return sb.toString();
            }

        } catch (MalformedURLException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            if (request != null) {
                try {
                    request.disconnect();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }
        return null;
    }

Если я использую метод GET, я получаю ошибку:

java. net .ProtocolException: метод не поддерживает тело запроса: GET

Я пытался с POST, но безуспешно.

Спасибо за ваш помощь.

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Я думаю, вам нужно отправить параметр вместе с этим запросом

Вы можете попробовать этот запрос в почтальоне, используя этот запрос

https://photoslibrary.googleapis.com/v1/mediaItems?pageSize=100

и передайте токен в разделе аутентификации.

Здесь вы можете сделать что-то вроде -

eg 
URI uri = new URIBuilder("https://photoslibrary.googleapis.com/v1/mediaItems")
          .addParameter("pageSize", 100)
          .build();

Предложение - использовать модификацию для сетевых запросов и проект jackson-databind для конверсий JSON .

0 голосов
/ 07 апреля 2020

Я думаю, что документация неверна, и вы должны использовать запрос POST вместо GET.

Также есть ошибка в документированном теле запроса JSON: есть запятая, которая должна не быть там Используйте следующее:

String body2 = "{\"pageSize\": \"100\"}";
...