Два метода GET с различными параметрами запроса: REST

можем ли мы создать тот же get URI, но с разными параметрами запроса?

например: у меня есть два остальных получить URIs:

/questions/ask/?type=rest
/questions/ask/?byUser=john

теперь служба REST не распознает два метода GET как отдельные и рассматривает его только 1 метод GET, который объявлен как первый.

  1. почему он так себя ведет?
  2. есть ли способ сделать два метода GET с разными параметрами запроса?

Это было бы очень оценили, если вы можете процитировать любой ресурс.

4 ответов


, потому что ресурс однозначно идентифицируется его путь (и не по его параметрам). Двух ресурсов можно определить уже по тому же пути.

@Path("/questions/ask")

по данным JSR-311 spec:

такие методы, известные как методы суб-ресурсов, относятся как к нормальным ресурсным методом (см. раздел 3.3), за исключением метод вызывается только для URI запроса, которые соответствуют шаблону URI, созданному путем объединения Ури шаблон класса ресурсов с помощью шаблона код метод.

поскольку ваша модель данных включает два разных ресурса, я предлагаю сделать два метода rest с разными путями:

@Path("/questions/ask/type")
@Path("/questions/ask/user")

Это RESTful способ, так как один URI представляет один и только один ресурс, и не должно быть перегрузки. Если один URI представляет более одного ресурса, это означает, что вы где-то ошиблись.


вы не можете иметь два геттера с одинаковым uri, но разными параметрами запроса. Что вы можете сделать, так это иметь один метод getter со многими параметрами запроса.

@RequestMapping(value = "uri", method = RequestMethod.GET)
public String test(@RequestParam String type, @RequestParam String byUser) 

затем вызовите его с двумя параметрами

/questions/ask/?type=rest&byUser=john

вы должны обрабатывать логику внутри метода тестирования для обработки этих параметров соответственно.

Что касается Дарияна, я думаю, что он должен решить пойти с двумя методами или одним методом, учитывая, что такое логика подчеркивания. Если ты ... переход с 2 методами затем использует два uri. Если бизнес-логика в порядке, чтобы пойти с одним uri, то используйте способ, которым я ответил


нельзя Overload REST запросы.

в вашем бизнес-слое вам нужно будет проверить, какая из двух переменных установлена, а затем вам придется выполнить необходимую обработку.


вы можете перегрузить конечную точку rest в терминах того, какие параметры запроса/запроса присутствуют в запросе. Вот ответ, который решил мой вариант использования:создайте два метода для одного шаблона url с разными аргументами