Два метода GET с различными параметрами запроса: REST
можем ли мы создать тот же get URI, но с разными параметрами запроса?
например: у меня есть два остальных получить URIs:
/questions/ask/?type=rest
/questions/ask/?byUser=john
теперь служба REST не распознает два метода GET как отдельные и рассматривает его только 1 метод GET, который объявлен как первый.
- почему он так себя ведет?
- есть ли способ сделать два метода 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 с разными аргументами