Шаг 150.
Язык программирования Java.
Пример использования библиотеки Gson и URLConnection

На этом шаге мы приведем пример использования библиотеки Gson и URLConnection

В данном примере мы будем использовать VK API (для тех, кто не знаком с данным API, рекомендуем прочитать документацию). Мы будем получать список первых пяти друзей пользователя, отсортированных по имени. Пользователя мы будем задавать с помощью его id, который передается через командную строку. Так как любой запрос к VK API отдает в качестве ответа json, то будем использовать рассмотренную раннее библиотеку Gson для десериализации ответа. Для выполнения запроса используется URLConnection.

Приведем ниже текст программы.

// Класс User
import com.google.gson.annotations.SerializedName;

public class User {
    @SerializedName("user_id")
    private int id;
    @SerializedName("first_name")
    private String firstName;
    @SerializedName("last_name")
    private String lastName;

    @Override
    public String toString() {
        return "\nid = " + id +
                "\n\tfirst_name = " + firstName +
                "\n\tlast_name = " + lastName;
    }
}
// Класс Main
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.sun.istack.internal.NotNull;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class Main {

    private static final String FRIENDS_URL_FMT = "https://api.vk.com/method/" + 
                             "friends.get?user_id=%s&fields=city&count=5&order=name";

    public static void main(String[] args) throws IOException {
        if (args.length == 0) {
            System.out.println("Введите id пользователя");
            return;
        }

        String id = args[0];
        // Получаем строку-json
        String json = getJsonFromUrl(String.format(FRIENDS_URL_FMT, id));
        // Парсим массив пользователей
        User[] friends = parseUsersFromJson(json);

        // Выводим результат
        if (friends.length == 0) {
            System.out.println("У пользователя \"" + id + "\" нет друзей");
        } else {
            System.out.println("Первые 5 друзей пользователя \"" + id + "\"");
            for (User friend : friends) {
                System.out.println(friend);
            }
        }
    }

    /**
     * Возвращает строку-json
     *
     * @param urlString url-адрес
     * @return строка-json
     */
    @NotNull
    private static String getJsonFromUrl(String urlString) throws IOException {
        URL url = new URL(urlString);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setConnectTimeout(10000);
        connection.setDoInput(true);
        connection.connect();

        try {
            if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
                return "[]";
            }

            InputStream in = connection.getInputStream();

            JsonElement jsonElement = new JsonParser().parse(new InputStreamReader(in));
            JsonObject jsonObject = jsonElement.getAsJsonObject();

            return (jsonObject.has("response"))
                    ? jsonObject.get("response").toString()
                    : "[]";
        } finally {
            connection.disconnect();
        }
    }

    /**
     * Возвращает массив пользователей
     *
     * @param json строка-json
     * @return Массив пользователей
     */
    @NotNull
    private static User[] parseUsersFromJson(String json) {
        return new Gson().fromJson(json, User[].class);
    }
}

Проект можно взять здесь


Рис. 1. Вывод программы

На следующем шаге мы рассмотрим класс Socket

Предыдущий шаг Содержание Следующий шаг