如何使用Spring Traverson构建查询参数

时间:2015-11-02 18:49:23

标签: spring-data-rest spring-hateoas

我有一个Spring Data Rest网络服务,启用了QueryDSL Web支持,因此我可以直接查询任何字段,如下所示;

http://localhost:9000/api/prod1007?cinfo1=0126486035

我正在使用Traverson访问此服务,但是traverson没有像上面那样生成查询参数;下面是我的代码(我在Hop级别尝试了withTemplateParameters()和withParameters())

代码:

Map<String,Object> parameters = new HashMap<String,Object>();
parameters.put("cinfo1", "0127498374");

PagedResources<Tbpinstance> items = traverson
.follow(Hop.rel("prod1007"))
.withTemplateParameters(parameters)
.toObject(resourceParameterizedTypeReference);

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

Traverson需要知道放置这些参数的位置。它们可以是路径参数,也可以是查询参数。此外,Traverson从根导航服务,因此可能需要将参数插入到中间的某个位置,而不是仅在最后一步中插入。

由于这些原因,服务器需要清楚地告诉如何使用这些参数。 Traverson需要一个HATEOAS-“目录”来进行服务。当Traverson HTTP GET成为http://localhost:9000/api文档时,它需要包含类似于此的链接:

"_links" : {
    "product" : {
      "href" : "http://localhost:9000/api/prod1007{?cinfo1}",
      "templated" : true
    },
}

现在它知道cinfo1参数是一个查询参数,并且能够将它放到原位。

答案 1 :(得分:1)

@ZeroOne,你完全正确,这就是服务器的响应应该是什么样子。目前spring-hateoas不支持看起来像这样的回复(我预计它将来会如我看到Oliver Gierke的评论表明spring-hateoas正在经历重大升级)。

截至撰写本文时,为了在您描述的情况下从服务器生成响应,我们使用了https://github.com/spring-projects/spring-hateoas/issues/169中提到的spring-hateoas-ext。您可以在https://github.com/dschulten/hydra-java#affordancebuilder-for-rich-hyperlinks-from-v-0-2-0找到代码。

这是替代品的下降&#39;对于春天的仇恨&#39; ControllerLinkBuilder。

这是我们使用的maven依赖(但检查最新版本)。

<!-- Drop in replacement from spring-hateoas ControllerLinkBuilder --> <dependency> <groupId>de.escalon.hypermedia</groupId> <artifactId>spring-hateoas-ext</artifactId> <version>0.3.0-beta6</version> </dependency>

这是我们在ResourceAssemblers中使用的导入。

import static de.escalon.hypermedia.spring.AffordanceBuilder.*;

相关问题