Spring Boot GET запрос к API - PullRequest
       3

Spring Boot GET запрос к API

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

Итак, у меня есть JSON данные в необработанном формате. Это просто обозначает текущие записи covid-19 по всему миру день ото дня. Мне нужно отправить запрос GET и отобразить данные в браузере с помощью Spring Boot. Я попробовал getForObject(url, class) метод, но он выдал ошибку с сообщением no suitable HttpMessageConverter found for response type. Я пытался решить это, но не смог. Затем я попробовал метод ObjectMapper.readValue(url, class) с URL-адресом JSON данных и Covid19.class. На этот раз я получаю сообщение об ошибке no protocol. Ниже приводится структура проекта:

Covid19. java:

public class Covid19 implements Serializable {
    private final String country;

    public Covid19(String country){
        this.country = country;
    }

    public String getCountry(){
        return country;
    }
}

Covid19Controller. java:

@RestController
public class Covid19Controller {
    @GetMapping(value = "/covid", produces = MediaType.APPLICATION_JSON_VALUE)
    public Covid19 covid19() throws IOException {
        URL url = new URL("raw.githubusercontent.com/pomber/covid19/master/docs/timeseries.json");
        Covid19 covid19 = new ObjectMapper().readValue(url, Covid19.class);
        return covid19;
    }

Основной класс:

public static void main(String[] args) {
    SpringApplication.run(DataminingWebserviceApplication.class, args);
}

На самом деле моей целью было отправить запрос GET с параметром country, но он застрял в самом начале. Я начал изучать Spring Boot вчера и пытался научиться этому. Есть много учебников, но ни один из них не подходит для моего случая так хорошо. Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 31 марта 2020

Используйте эту модель для отображения данных

public class Covid19 {
  String date;
  Integer confirmed;
  Integer recovered;
  Integer deaths;
  ... setter getter
}

И для чтения данных используйте

    final String uri = "https://raw.githubusercontent.com/pomber/covid19/master/docs/timeseries.json";
    ObjectMapper objectMapper = new ObjectMapper();
    Map<String, List<Covid19>> countryMap = objectMapper.readValue(uri,new TypeReference<Map<String, List<Covid19>>>(){});
1 голос
/ 31 марта 2020

Неправильный класс, который вы определили. Создайте такой класс

@JsonIgnoreProperties(ignoreUnknown = true)
public class Covid19{
    private int confirmed;
    private int deaths;
     ....
    // add other fields and Getters & Setters
}

И код для чтения данных должен выглядеть следующим образом

URL url = new URL("https://raw.githubusercontent.com/pomber/covid19/master/docs/timeseries.json");
final Map<String, List<Covid19>> covid19Map= new ObjectMapper().readValue(url, new TypeReference<Map<String, List<Covid19>>>() {});

covid19Map будет иметь введите страну и значение в виде списка с указанием даты, как указано в json

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

Используйте HTTP-протокол для доступа к URL:

URL("http://raw.githubusercontent.com/pomber/covid19/master/docs/timeseries.json");

Кроме того, используйте следующий код для получения данных

URL hh= new URL("http://raw.githubusercontent.com/pomber/covid19/master/docs/timeseries.json");
        URLConnection connection = hh.openConnection();
/*
If your URL is redirected to other URL. It's quite normal and web site may have many reasons to redirect you. Just follow the redirect based on "Location" HTTP header like that:
*/
        String redirect = connection.getHeaderField("Location");
        if (redirect != null){
            connection = new URL(redirect).openConnection();
        }
        BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String inputLine;
        System.out.println();
        while ((inputLine = in.readLine()) != null) {
            System.out.println(inputLine);
        }

Кроме того, чтобы отправить данные через API, сделайте изменения в вашем классе POJO и соответственно возвращают Object.

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