我想了解如何創建和修改鏈接在春天HATEOAS。如何把和鏈接與春天HATEOAS
例如,假設我有兩個集合,一個在api/users和另一個在api/event。我想將用戶api/user/56與事件api/event/21相關聯。出於參數的緣故,這是多對多的 - 用戶可能參加很多活動,一個活動可能會有很多用戶。根據我的理解,這樣做的方法是使用URI作爲主鍵,所以我可能會將以下內容發佈到api/user/56/events;
{
attends: "http://localhost:9090/api/event/21"
}
然後,端點需要能夠解析該URL,並提取ID(在此情況下21)和所述控制器(EventController.class),這樣我可以保持此。
問題1:這是用REST API處理Spring Hateoas中關係的正確方法嗎?
問題2:如何解決這個URL在一個控制器上的數據可使用的手柄(例如,以適當的控制器/方法,主鍵等的引用)
研究
RestTemplate可用於在請求映射方法內請求來自控制器的數據,就像這樣;
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<EventResource> response = restTemplate.getForEntity(attendsUrl, EventResource.class);
EventResource eventResource = response.getBody();
不過,我不認爲eventResource應該返回一個ID字段作爲數據的一部分 - 它不是很寧靜,這將在API暴露。一種方法是有一個參數「includePK = true」,但是這又不恰當 - 它只是隱藏了問題。此外,服務器以這種方式向自己的API請求的想法似乎是迂迴的。
更新
有這個這裏https://github.com/spring-projects/spring-hateoas/issues/292一個懸而未決的問題。基於這個問題的一些評論(用戶kevinconaway),我做了一個快速的util類,在這裏提供了一個簡單的解決方案:SpringHateoasUtils。解決方案歸結爲;
String mapping = DISCOVERER.getMapping(targetClass, targetMethod);
UriTemplate template = new UriTemplate(mapping);
//values is key/value map of parameters that the referenced method accepts
Map<String, String> values = uriTemplate.match(uri);
SpringHateoasUtils使這個稍微好一些,但它仍然覺得它應該是一個功能。我會尋求在春季代碼中獲得一些東西 - 當清楚發生了什麼時,我會回答這個問題。
您會後通過'http://本地主機:9090/API /事件/ 21'只。 Spring HATEOAS不會幫助您取消引用URL。這只是爲了迴應,而不是要求。你可能會看看[Spring Data REST](http://projects.spring.io/spring-data-rest/) – zeroflagL 2014-10-13 11:18:03
與Spring HATEOAS一起工作了好幾個月,它肯定不會正確支持REST,所以我必須實施類似的解決方法來描述您所描述的內容。 – 2017-01-23 20:43:32