[英]Return link from Hateos
我有這個舊的 Spring Hateos 代碼,我想遷移到最新版本:
Map<String, Link> links = new HashMap<>();
links.put(Link.REL_NEXT, response.getLink(Link.REL_NEXT));
links.put(Link.REL_PREVIOUS, response.getLink(Link.REL_PREVIOUS));
addLink(url, response, links, Link.REL_NEXT);
addLink(url, response, links, Link.REL_PREVIOUS);
....
private void addLink(String baseUrl, WebResource response, Map<String, Link> links, String rel) {
if (links.get(rel) == null) {
return;
}
Link link = links.get(rel);
String href = baseUrl;
if (link.getHref().contains("?")) {
href = href + link.getHref().substring(link.getHref().indexOf('?'));
}
link = Link.of(href, rel);
response.add(link);
}
我試過這個:
Map<LinkRelation, Optional> links = new HashMap<>();
links.put(IanaLinkRelations.SELF, response.getLink(IanaLinkRelations.SELF));
links.put(IanaLinkRelations.NEXT, response.getLink(IanaLinkRelations.NEXT));
links.put(IanaLinkRelations.PREVIOUS, response.getLink(IanaLinkRelations.PREVIOUS));
addLink(apmCoreBaseUrl, response, links, IanaLinkRelations.SELF);
addLink(apmCoreBaseUrl, response, links, IanaLinkRelations.NEXT);
addLink(apmCoreBaseUrl, response, links, IanaLinkRelations.PREVIOUS);
private void addLink(String baseUrl, RegistrationsResource response, Map<LinkRelation, Optional> links, LinkRelation rel) {
if (links.get(rel) == null) {
return;
}
Link link = links.get(rel);
String href = baseUrl;
if (link.getHref().contains("?")) {
href = href + link.getHref().substring(link.getHref().indexOf('?'));
}
link = Link.of(href, rel);
response.add(link);
}
我在這一行得到錯誤:
Link link = links.get(rel);
Required type: Link
Provided: Optional
你能告訴我實現這個的正確方法是什么嗎?
根據您對遷移的評論和問題,這就是我的建議:
Map<LinkRelation, Optional<Link>> links = new HashMap<LinkRelation, Optional<Link>>();
links.put(IanaLinkRelations.SELF, Optional.of(response.getLink(IanaLinkRelations.SELF)));
links.put(IanaLinkRelations.NEXT, Optional.of(response.getLink(IanaLinkRelations.NEXT)));
links.put(IanaLinkRelations.PREVIOUS, Optional.of(response.getLink(IanaLinkRelations.PREVIOUS)));
……
//調用addLinlk
addLink(apmCoreBaseUrl, response, links, IanaLinkRelations.SELF);
addLink(apmCoreBaseUrl, response, links, IanaLinkRelations.NEXT);
addLink(apmCoreBaseUrl, response, links, IanaLinkRelations.PREVIOUS);
在 addLink 內部:
private void addLink(String baseUrl, RegistrationsResource response, Map<LinkRelation, Optional> links, LinkRelation rel) {
links.get(rel).ifPresent(x->{
Link link = x;
String href = baseUrl;
if (link.getHref().contains("?")) {
href = href + link.getHref().substring(link.getHref().indexOf('?'));
}
link = Link.of(href, rel);
response.add(link);
});
}
使用 Java 11 和 spring-hateoas 1.5.0 測試。 如果您有任何不同的版本,請告訴我。
編輯
根據 OP 所述,他們使用的是 hatoas 版本2.6.7
。 OP 代碼中的response
引用是擴展RepresentationModel的自定義類。 所以response.getLink(..)
將返回Optional<Link>
的類型。 因此,以下解決方法將起作用:
Map<LinkRelation, Optional<Link>> links = new HashMap<LinkRelation, Optional<Link>>();
links.put(IanaLinkRelations.SELF, response.getLink(IanaLinkRelations.SELF));
...
addLink
無需更改,調用addLink
無需更改,我的原始答案對其他操作仍然有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.