Hallo liebe Community,
ich versuche gerade eine Rest API zu Reisewarnungen im Backend einzubinden (FYI die hier). Das json Format sollte eigentlich so aussehen:
Jetzt habe ich die Struktur nachgebaut, um mit einem GetMapping auf Spring die Daten abzuholen. Meine Objekte sind einfach gehalten:
Und der Controller:
Grundsätzlich scheint das zu funktionieren, allerdings kommt nur die Hälfte an. Wenn ich die get Methode mit Postman abrufe, erhalte ich:
Aufällig ist, dass das Objekt Country Code (DE) in Kleinbuchstaben dasteht. Ich vermute den Fehler hier, da json case sensitive ist, es ist mir aber ein Rätsel, wie ich das Ändern könnte.
Zweitens, stehe ich auch auf dem Schlauch, wie man die Daten aller Länder vernünftig abrufen kann (FYI, die API gibts hier). Das scheint mir nämlich ein Monsterobjekt^TM zu sein, in dem ein Objekt api_status und ungefähr 180 Objekte mit Ländercodes stehen. Irgendwie scheint das alles nicht so zu funktionieren, wie ich es aus kleineren APIs gewohnt bin...hat jemand einen Tipp / Link / Hinweis, wie ich das Lösen kann?
Vielen Dank
Tom
ich versuche gerade eine Rest API zu Reisewarnungen im Backend einzubinden (FYI die hier). Das json Format sollte eigentlich so aussehen:
JSON:
{
"api_status": {
"request": {
"item": "de"
},
"reply": {
"cache": "renewed",
"code": 200,
"status": "ok",
"note": "The api works, we could match requested country code.",
"count": 1
}
},
"data": {
"DE": {
"iso_alpha2": "DE",
"name": "Germany",
"continent": "EU",
"advisory": {
"score": 1.5,
"sources_active": 4,
"message": "Germany has a current risk level of 1.5 (out of 5). We Advise: Travelling Germany is (relatively) safe.",
"updated": "2019-02-12 19:53:38",
"source": "https:\/\/www.travel-advisory.info\/germany"
}
}
}
}
Jetzt habe ich die Struktur nachgebaut, um mit einem GetMapping auf Spring die Daten abzuholen. Meine Objekte sind einfach gehalten:
Java:
package com.savetravel.SaveTravel.TravelWarning;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@NoArgsConstructor
@Getter
@Setter
public class TravelWarningObject {
private Api_status api_status;
private Data data;
}
Java:
package com.savetravel.SaveTravel.TravelWarning;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@NoArgsConstructor
@Getter
@Setter
public class Api_status {
private Request request;
private Reply reply;
}
Java:
package com.savetravel.SaveTravel.TravelWarning;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@NoArgsConstructor
@Getter
@Setter
public class Reply {
private String cache;
private int code;
private String status;
private String note;
private int count;
}
Java:
package com.savetravel.SaveTravel.TravelWarning;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@NoArgsConstructor
@Getter
@Setter
public class Request {
private String item;
}
Java:
package com.savetravel.SaveTravel.TravelWarning;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@NoArgsConstructor
@Getter
@Setter
public class Data {
private CountryCode DE;
}
Java:
package com.savetravel.SaveTravel.TravelWarning;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@NoArgsConstructor
@Getter
@Setter
public class CountryCode {
private String iso_alpha_2;
private String name;
private String continent;
private Advisory advisory;
}
Und der Controller:
Java:
package com.savetravel.SaveTravel;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.savetravel.SaveTravel.TravelWarning.TravelWarningObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import org.springframework.web.client.RestTemplate;
@RestController
@RequestMapping("/gettravelwarnings")
public class TravelWarningController {
@GetMapping
public TravelWarningObject getTravelWarnings()
throws JsonMappingException, JsonProcessingException {
RestTemplate restTemplate= new RestTemplate();
TravelWarningObject newTravelWarning = new TravelWarningObject();
ResponseEntity<TravelWarningObject> responseEntity = restTemplate.getForEntity(
"https://www.travel-Advisory.info/api?countrycode=DE",
TravelWarningObject.class);
newTravelWarning = responseEntity.getBody();
return newTravelWarning;
}
}
Grundsätzlich scheint das zu funktionieren, allerdings kommt nur die Hälfte an. Wenn ich die get Methode mit Postman abrufe, erhalte ich:
JSON:
{
"api_status": {
"request": {
"item": "de"
},
"reply": {
"cache": "cached",
"code": 200,
"status": "ok",
"note": "The api works, we could match requested country code.",
"count": 1
}
},
"data": {
"de": null
}
}
Aufällig ist, dass das Objekt Country Code (DE) in Kleinbuchstaben dasteht. Ich vermute den Fehler hier, da json case sensitive ist, es ist mir aber ein Rätsel, wie ich das Ändern könnte.
Zweitens, stehe ich auch auf dem Schlauch, wie man die Daten aller Länder vernünftig abrufen kann (FYI, die API gibts hier). Das scheint mir nämlich ein Monsterobjekt^TM zu sein, in dem ein Objekt api_status und ungefähr 180 Objekte mit Ländercodes stehen. Irgendwie scheint das alles nicht so zu funktionieren, wie ich es aus kleineren APIs gewohnt bin...hat jemand einen Tipp / Link / Hinweis, wie ich das Lösen kann?
Vielen Dank
Tom