我有一个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);
非常感谢任何帮助。谢谢!
答案 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.*;