Ссылка HATEOAS на метод с необязательными параметрами запроса

Я хочу сослаться на метод, который имеет следующую подпись:

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

Теперь я хочу, чтобы ссылка выглядела так:

http://myhost/api/someobjects

Я попытался использовать methodOn из ControllerLinkBuilder Spring HATEOAS, как показано ниже:

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

Но это не ведет к нужной ссылке, потому что в конце добавляется ?foo. Как я могу достичь вышеуказанной цели?


person rkcpi    schedule 26.11.2013    source источник
comment
Почему так важно, как выглядит ссылка? Это одна из приятных особенностей HATEOAS; на самом деле не имеет значения, как они выглядят.   -  person Jonathan W    schedule 27.11.2013
comment
В данном случае это имеет значение, потому что ответ должен выглядеть точно так же, как и в предыдущей реализации (которая не была реализована с помощью HATEOAS), которая не добавляла часть ?foo.   -  person rkcpi    schedule 27.11.2013
comment
Итак, вы пытаетесь создать новую версию своего приложения, обратно совместимую с приложением до HATEOAS? Звучит жестко. Что вы надеетесь получить от создания гипермедиа-приложения в этом случае?   -  person Jonathan W    schedule 27.11.2013


Ответы (1)


Поскольку обратная совместимость является для вас такой проблемой, вы всегда можете вручную создать свои объекты Link следующим образом:

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

Другой вариант — разветвить Spring HATEOAS на GitHub, собрать проект самостоятельно и изменить способ обработки значений по умолчанию в ControllerLinkBuilder. Я действительно не знаю, как вы ожидаете, что внеконтекстный компоновщик ссылок сможет различать, следует ли рекламировать необязательный параметр. В мире HATEOAS, если параметр не включен, клиент об этом не знает. Так зачем вообще иметь необязательный параметр?

person Jonathan W    schedule 27.11.2013