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

Можем ли мы создать такой же GET URI, но с другими параметрами запроса?

Например: у меня есть два REST GET URI:

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

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

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

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

4 ответа

Решение

Потому что ресурс уникально идентифицируется по его PATH (а не по его параметрам). Два указанных вами ресурса имеют одинаковый PATH.

@Path("/questions/ask")

Согласно спецификации JSR-311:

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

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

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

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

Ты не можешь OverloadREST Запросы.

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

У вас не может быть двух получателей с одинаковыми URI, но разными параметрами запроса. Что вы можете сделать, так это иметь один метод получения с множеством параметров запроса.

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

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

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

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

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

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

Другие вопросы по тегам