Используя Spring RestTemplate, я бы хотел использовать службу REST на основе HAL с упрощенной конфигурацией, подобной этой:
GET http://my.rest.service/items/123
возвращает
{
"_links": {
"category": {
"href": "/categories/321"
},
"self": {
"href": "/items/123"
}
},
"name": "my wonderful item"
}
GET на http://my.rest.service/categories/321
затем будет соответственно возвращать категорию, которой назначен мой элемент (которая выглядит очень похоже на JSON выше).
То, что я могу сделать до сих пор (и что работает :)), это какая-то «ручная» ссылка -следующее:
public Item getItemById(Integer itemId) {
RestTemplate restTemplate = getRestTemplateWithHalMessageConverter();
ResponseEntity<Resource<Budget>> response =
restTemplate.exchange("http://my.rest.service/items/"+itemId,
HttpMethod.GET, getHttpEntity(),
new ParameterizedTypeReference<Resource<Item>>() {}
);
ResponseEntity<Resource<Category>> catResponse =
restTemplate.exchange("http://my.rest.service/" +
response.getBody().getLink("category").getHref(),
HttpMethod.GET, getHttpEntity(),
new ParameterizedTypeReference<Resource<Category>>() {}
);
Item result = response.getBody().getContent();
//^^ Now this is an item with NULL in category field
result.setCategory(catResponse.getBody().getContent());
//And voila, now the category is assigned
return result;
}
(я не публиковал здесь «вспомогательные» функции, такие как getRestTemplateWithHalMessageConverter()
, так как ИМХО они не имеют отношения к этому вопросу, тем более, что они работают, как ожидалось.)
Я хотел бы добиться «автоматического следования» за ссылками в ответе HAL и заполнения моих Java-объектов соответственно.
Итак, мой вопрос, есть ли способ получить «автоматический» _link
следующее, так что мой Item
будет полностью заполнен без второго exchange
и т. д.?Это простой пример, но у меня есть более сложные объекты со многими ссылками.Конечно, можно предположить, что соответствующие поля существуют в определенных классах.
И по вопросу бонуса;): Можно ли это использовать вместе с каким-то видом кэширования?Если бы у меня было 30 предметов с категорией 8
, мне бы не хотелось иметь 30 звонков на конечную точку category
...
Если для обоих вопросов не существует готового решения (по крайней мере, я не нашел ...) и я должен написать свой собственный, я в порядке с этим!Просто хочу убедиться, что я не изобретаю велосипед заново только потому, что что-то пропустил ...
Спасибо большое !!