Ich habe zwei Anwendungen, eine heißt bar, was mir Ressourcen im HAL-Format zur Verfügung stellt. Das andere ist bcm, um diesen Dienst zu verbrauchen.Consuming Spring Hateoas Restservice mit RestTemplate
Beispiel für die Antwort bar sieht wie folgt aus:
[
{
"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"
}
}
},
{
...
Jetzt versuche ich, das zu konsumieren von bcm mit Spring RestTemplate. Meine Lösung funktioniert, aber ich bin mit dieser Lösung nicht zufrieden und denke, dass es einen saubereren Weg gibt.
Kundencenter-Kodex RestService raubend wie folgt aussieht:
@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;
}
Es gibt nur wenige hässlichen Code ist wie Sie sehen. Eine davon ist, dass ich keine Generika für meine Sammlungen habe. Der andere Punkt, ich bekomme die Resource_ID sehr kompliziert, und ich benutze StringUtils.remove viele Male, um die selbe URL zu extrahieren.
Ich bin sicher, es muss eine bequemere Möglichkeit geben, HAL-Response bis zum Frühjahr zu konsumieren.
Vielen Dank.
Jedes Update mit dem letzten Versionen für diese Antwort? – Snekse
Leider nicht. Aber ich habe seitdem auch nicht viel geforscht. –
Sie können 'new ParameterizedTypeReference>() {}' verwenden, um Unterklassen zu vermeiden. –
afaulconbridge