Mam więc to JSON Data, który jest w formacie RAW . Po prostu oznacza aktualne rekordy Covid-19 na całym świecie. Muszę wysłać żądanie do niego i wyświetlić dane w przeglądarce przy użyciu bootu Spring. Próbowałem metody getForObject(url, class), ale spowodowało błąd z komunikatem no suitable HttpMessageConverter found for response type. Próbowałem go rozwiązać, ale nie mógł. Następnie spróbowałem metody ObjectMapper.readValue(url, class) z adresem URL danych JSON i Covid19.class. Tym razem otrzymuję błąd z wiadomością no protocol. Poniżej znajduje się struktura projektu:

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;
    }

Klasa główna:

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

Właściwie moim celem było wysłać żądanie z parametrem {X0}}, ale utknął na samym początku. Zacząłem studiować wczoraj wiosenny but i próbując go nauczyć. Jest mnóstwo samouczków, ale nikt tak dobrze pasuje do mojego przypadku. Z góry dziękuję.

0
zodiac645 31 marzec 2020, 18:27

3 odpowiedzi

Najlepsza odpowiedź

Zdefiniowana klasa jest nieprawidłowa, utwórz tę klasę

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

A kod do przeczytania danych powinien wyglądać tak

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>>>() {});

Mapa Covid 19 będzie miał klucz jako kraj i wartość jako liście mędrna data, jak wskazano w JSON

1
pvpkiran 31 marzec 2020, 17:18

Użyj tego modelu, aby mapować dane

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

I przeczytać użycie danych

    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>>>(){});
2
Eklavya 31 marzec 2020, 17:53

Użyj protokołu HTTP, aby uzyskać dostęp do URL:

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

Użyj również następującego kodu, aby uzyskać dane

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);
        }

Ponadto, aby wysłać dane za pośrednictwem API, wprowadzaj zmiany w klasie POJO i odpowiednio zwróć obiekt.

0
backdoor 31 marzec 2020, 16:18