Как сделать api запрос к stepik на java?

Необходимо получить информацию об определенном курсе на stepik используя api на java. Мне нужно сделать запрос так, чтобы получить список курсов, на которые открыта запись, вот json: https://stepic.org/api/courses?is_featured=true , как я понял можно взять все курсы и отфильтровать те, где enrollment: null , но может кто глянуть и с кодом помочь?


Ответы (1 шт):

Автор решения: Дмитрий

Все достаточно просто. Будем использовать для десереализации json в объекты библиотеку Gson. Также я использую lombok для того, чтобы не писать геттеры, сеттеры и т.д. (вы можете писать, это на ваше усмотрение). По сути это все, что нам нужно. Класс Main выполняет запрос и передает его десереализатору, после чего результат выводится в консоль. Оставшиеся 3 класса - наши модели, в которые мы парсим результат. В классе Courses я объявил только 2 поля(их слишком много и скорее всего все вм и не нужны), поэтому только они попадают в результат. Допишите те поля, которые вам нужны.

import com.google.gson.Gson;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class Main {

    public static void main(String[] args) throws Exception {        
        ResponseStepic result = new Gson().fromJson(sendGet("https://stepic.org/api/courses?is_featured=true"), ResponseStepic.class);
        System.out.println(result);
    }

    private static String sendGet(String url) throws Exception {

        HttpURLConnection httpClient = (HttpURLConnection) new URL(url).openConnection();
        httpClient.setRequestMethod("GET");
        httpClient.setRequestProperty("User-Agent", "Mozilla/5.0");

        try (BufferedReader in = new BufferedReader(new InputStreamReader(httpClient.getInputStream()))) {
            final StringBuilder response = new StringBuilder();
            String line;
            while ((line = in.readLine()) != null) response.append(line).append("\n");
            return response.toString();
        }

    }

}
import java.util.List;

@lombok.Data
public class ResponseStepic {

    private Meta meta;

    private List<Courses> courses;

    private List<Object> enrollments;

}
import com.google.gson.annotations.SerializedName;

@lombok.Data
class Meta {

    private Integer page;

    @SerializedName("hasPrevious")
    private String has_previous;

    @SerializedName("has_next")
    private String hasNext;

}
@lombok.Data
public class Courses {

    private Integer id;

    private String summary;

}
→ Ссылка