Tôi có hai ứng dụng, một ứng dụng được gọi là thanh, những gì cung cấp cho tôi tài nguyên ở định dạng HAL. Người kia là bcm để sử dụng dịch vụ đó.Tiêu thụ dịch vụ nghỉ ngơi mùa xuân Hateoas với RestTemplate
Ví dụ về phản ứng thanh trông như thế này:
[
{
"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"
}
}
},
{
...
Bây giờ tôi cố gắng để tiêu thụ mà từ tỷ mét khối sử dụng Spring RestTemplate. Giải pháp của tôi hoạt động, nhưng tôi không hài lòng với giải pháp đó bằng cách nào đó và tôi đoán có một cách sạch sẽ hơn.
My Client-Mã tốn RestService trông giống như:
@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;
}
Có rất ít mã xấu xí như bạn thấy. Một trong số đó là, tôi không có bất kỳ generics cho bộ sưu tập của tôi. Điểm khác, tôi nhận được Resource_ID rất phức tạp, và tôi sử dụng StringUtils.remove nhiều lần để trích xuất các url tự.
Tôi chắc chắn phải có cách thuận tiện hơn để tiêu thụ Phản hồi HAL vào Mùa xuân.
Cảm ơn bạn.
Mọi cập nhật với các bản phát hành gần đây cho câu trả lời này? – Snekse
Thật không may là không. Nhưng tôi cũng đã không thực hiện nhiều nghiên cứu kể từ đó. –
Bạn có thể sử dụng 'ParameterizedTypeReference mới>() {}' để tránh phân lớp con. –
afaulconbridge