2013-11-26 41 views
1

我想链接到具有以下签名的方法:HATEOAS链接到方法可选requestparams

public SomeResponse getSomeObjects(@RequestParam(value = "foo", defaultValue = "bar") Foo fooValue) 

现在我想的链接看起来像这样:

http://myhost/api/someobjects 

我试着使用methodOn距离Spring HATEOAS的ControllerLinkBuilder,如下图所示:

discoverResponse.add(linkTo(methodOn(SomeController.class).getSomeObjects(null)).withRel("someobjects")) 

不过母鹿不会导致期望的链接,因为?foo被添加在其末尾。我怎样才能达到上述目标?

+0

为什么链接看起来像什么?这是关于HATEOAS的好事之一;它们看起来并不重要。 –

+0

在这种情况下,它很重要,因为响应需要看起来与以前的实现(没有用HATEOAS实现)完全一样,它没有添加?foo部分。 – rkcpi

+0

所以你正在尝试构建一个新版本的应用程序,它是与HATEOAS应用程序一起向后兼容的版本?听起来很难。在这种情况下,您希望从构建超媒体驱动的应用程序中获得什么? –

回答

1

由于向后兼容性是您这样一个问题,你总是可以手动构造你的链接对象,像这样:

discoverResponse.add(new Link(baseUri() + "/someobjects", "someobjects"));

另一个选择是到餐桌春HATEOAS在GitHub上,你自己建项目,并更改默认值在ControllerLinkBuilder中的处理方式。我真的不知道你期望一个不在场的链接构建器能够区分它是否应该公布一个可选参数。在HATEOAS世界中,如果参数不包含,客户端不知道它。那么为什么即使有可选参数?