我想了解如何创建和修改链接在春天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