使用HATEOAS链接功能非常棒我试图输出模板化网址以突出显示用户可用的过滤器参数
示例控制器方法
@RequestMapping(value = "/persons", method = RequestMethod.GET, produces = "application/hal+json")
public PersonsResource getPersons (@RequestParam(required = false, value = "name") String name, @RequestParam(required = false, value = "age") Integer age) {
...
personsResource.add(ControllerLinkBuilder.linkTo(ControllerLinkBuilder.methodOn(PersonController.class).getPersons(name, age)).withSelfRel());
}
调用此方法时,不显示参数链接
_links: {
self: {
href: "http://myserver:8080/persons"
}
}
但我喜欢
href: "http://myserver:8080/persons?name={name}&age={age}
如果提供了一个参数,那就更好了
href: "http://myserver:8080/persons?name={name}&age=21
锦上添花将是{...]的查询参数被忽略?
有没有人知道使用Spring HATEOAS api是否可行?我已经设法对此进行了编码,但这似乎是对API的合理建议吗?
答案 0 :(得分:3)
您可以尝试使用spring-hateoas-ext中的AffordanceBuilder作为ControllerLinkBuilder的替代品。它为您在linkTo-methodOn习语中未定义的参数创建模板变量。
它不仅允许创建模板,还为您提供RFC 5988链接的全部功能,并且具有关于请求主体的知识,因此可以使用表单样式的请求描述符呈现Hydra或Html或Siren响应。
免责声明:我是spring-hateoas-ext。
的作者答案 1 :(得分:0)
我猜,框架还很不成熟。
我有v.0.11.0.RELEASE并且遇到同样的问题。
当您不提供参数值时,由于ControllerLinkBuilder.linkTo(methodOn)调用,您没有模板URL。这就是你所说的方法,来自方法注释的基本路径。
但是当你提供参数值时,它就像你说的那样:
https://stackoverflow.com/some/service/path?name=SomeName&age=11
(在我的情况下,参数不同,但效果是你在这里看到的那个)
“概念正确”的网址应为
https://stackoverflow.com/some/service/path{?name,age}
但Spring HATEOAS不支持这一点。除非你想在代码中自己添加它。这真的是不受欢迎的。
我从JavaEE检查了UriBuilder,它的工作方式相同,没有支持查询参数的模板。
答案 2 :(得分:0)
最新的spring-hateoas版本已经解决了这个问题。您可以检查以下问题:
https://github.com/spring-projects/spring-hateoas/issues/169
您应该能够使用以下内容获取所需的模板化URL:
resource.add(linkTo(methodOn(Controller.class).method(null)).withSelfRel());