На этом шаге мы приведем пример использования библиотеки 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