Mam dwie aplikacje, jedna nazywa się bar, co zapewnia mi zasoby w formacie HAL. Druga to bcm do korzystania z tej usługi.Konsumpcja Spring Hateoas Restservice z RestTemplate
Przykład odpowiedzi pasku wygląda następująco:
[
{
"name":"Brenner/in",
"_links":{
"self":{
"href":"..host/bbsng-app-rest/betrieb/15"
}
}
},
{
"name":"Dienstleistungshelfer/in HW",
"_links":{
"self":{
"href":"..host/bbsng-app-rest/betrieb/4"
}
}
},
{
...
Teraz staram się spożywać że od bcm wykorzystaniem Wiosna RestTemplate. Moje rozwiązanie działa, ale nie jestem zadowolony z tego rozwiązania i wydaje mi się, że jest bardziej czysty sposób.
Mój klient-Code spożywania RestService wygląda następująco:
@Autowired private RestTemplate template;
@Override
@SuppressWarnings("unchecked")
public BerufListe findeAlleBerufe() {
final BerufListe berufListe = new BerufListe();
final ResponseEntity<List> entity = template.getForEntity(LinkUtils.findBeruf(), List.class);
if (OK.equals(entity.getStatusCode())) {
final List<LinkedHashMap> body = entity.getBody();
for (final LinkedHashMap map : body) {
final LinkedHashMap idMap = (LinkedHashMap) map.get("_links");
String id = remove(String.valueOf(idMap.get("self")), "href=");
id = remove(id, "{");
id = remove(id, "}");
final String name = String.valueOf(map.get("name"));
final Beruf beruf = new Beruf(id, name);
berufListe.add(beruf);
}
}
return berufListe;
}
Istnieje kilka brzydki kod, jak widać. Jednym z nich jest to, że nie mam generycznych dla moich kolekcji. Inną kwestią jest bardzo skomplikowane Resource_ID i używam StringUtils.remove wiele razy, aby wyodrębnić własny adres URL.
Jestem pewien, że musi istnieć wygodniejszy sposób spożywania odpowiedzi HAL na wiosnę.
Dzięki.
każdej aktualizacji z ostatnich wydań dla tej odpowiedzi? – Snekse
Niestety nie. Ale od tego czasu również nie zrobiłem zbyt wielu badań. –
Możesz użyć 'new ParameterizedTypeReference>() {}', aby uniknąć podklasy. –
afaulconbridge