У меня есть два приложения: один называется бар, что дает мне ресурсы в формате HAL. Другой - bcm, чтобы использовать эту услугу.Потребление весны Hateoas Restservice с RestTemplate
Пример ответа бар выглядит следующим образом:
[
{
"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"
}
}
},
{
...
Сейчас я стараюсь потреблять, что с млрд куб с использованием Spring RestTemplate. Мое решение работает, но я не очень доволен этим решением, и я думаю, что есть более чистый способ.
Мой клиент-код потребляя RestService выглядит следующим образом:
@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;
}
Есть несколько уродливого кода, как вы видите. Один из них заключается в том, что у меня нет никаких дженериков для моих коллекций. В другом случае, я получаю Resource_ID очень сложным, и я использую StringUtils.remove много раз, чтобы извлечь собственный URL-адрес.
Я уверен, что должен быть более удобный способ потребления HAL-Response весной.
Спасибо.
Любое обновление с последними выпусками для этого ответа? – Snekse
К сожалению, нет. Но с тех пор я еще не много исследовал. –
Вы можете использовать 'new ParameterizedTypeReference>() {}', чтобы избежать подкласса. –
afaulconbridge