【问题标题】:How to build HAL links with "templated:true" using Spring-hateoas?如何使用 Spring-hateoas 使用“templated:true”构建 HAL 链接?
【发布时间】:2014-04-12 15:23:11
【问题描述】:

我正在尝试弄清楚如何使用 templated: true 构建 HAL 链接。如果我使用

BasicLinkBuilder.linkToCurrentMapping().slash("api/public/blogs/{blog}").withRel("blog");

{} 字符仍被编码。知道如何通过其 API 将 Spring-hateo 构建为 0.10.0.RELEASE 的模板 URL 链接吗?

谢谢。

【问题讨论】:

  • 我也想知道这个..如果您查看包含链接的回复,您会注意到 { 和 } 将被 url 转义...这是不对的跨度>

标签: hateoas spring-hateoas hal-json


【解决方案1】:

我也想知道这是如何使用 HATEOAS API 完成的。现在我们已经通过使用 BasicLinkBuilder 和 ControllerLinkBuilder 类生成 Link 对象,然后将模板化查询参数附加到 new Link(String href) 构造函数来解决它。有趣的是,这会构建一个带有templated: true 属性的链接。

我们注意到,尝试将 {blog} 等值传递到 LinkBuilder 类会导致这些值试图从当前请求中的值替换(即链接构建器试图从当前请求中查找 ?blog=value 并且将 value 替换到正在构建的链接中,因为这不存在导致异常。

虽然解决方法不是特别好,但我的团队无法找到任何方法通过 API 将模板化参数导入 LinkBuilders 而不会导致问题。

【讨论】:

  • 我正在使用 UriTemplate 构造一个模板化的 URI,然后传递给 new Link()。请参阅我的博客jiwhiz.com/post/2014/4/… 和我的开源项目github.com/jiwhiz/JiwhizBlogWeb。我希望 Spring HATEOAS 可以提供更正式的 API 来做到这一点。
  • 我的团队也来到了同样的地方
  • @jiwhiz 我做的和你描述的差不多。问题似乎是ControllerLinkBuilder 使用了org.springframework.web.util.UriTemplate,它不允许未解析的变量。有一个org.springframework.hateoas.UriTemplate 似乎可以完成这项工作,但是渲染时的链接缺少templated: true 属性,即使在调试器中我看到Link.isTemplated 方法返回true。此外,链接是相对呈现的,因为预先设置了上下文路径等的构建器类。 al 是 ControllerLinkBuilder 中的包范围。
【解决方案2】:

为了获得链接中的括号,我最终得到了一个有点老套的解决方案,但作为一种临时解决方法:

  • 创建类:
public class BracketsLink extends Link {
    public BracketsLink(Link link) {
        super(link.getHref().replaceAll("%7B", "{").replaceAll("%7D", "}"), link.getRel());
    }
}
  • 并使用BracketsLink类创建链接:
new BracketsLink(linkTo(methodOn(MessageController.class).message("{id}")).withRel("message"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2020-11-17
    相关资源
    最近更新 更多