разница RequestMethod.GET RequestMethod.POST
Не могу найти информация в интернете вообще. Допустим, у меня есть функция
@RequestMapping(value = "/whoami", method = RequestMethod.GET)
public String index(@RequestParam String name) {
return "You are " + name;
}
Задача сделать RequestMethod.POST. в чем будет разница? Как я понял GET сравнивает адрес и если находит /whoami, то выполняет эту функцию.
Но судя по примеру ниже мое понимание не верно Нашел в интернете код
@RequestMapping(value = "/ex/foos", method = RequestMethod.GET)
@ResponseBody
public String getFoosBySimplePath() {
return "Get some Foos";
}
Чтобы проверить это сопоставление с помощью простой команды curl , запустите:
curl -i http://localhost:8080/ex/foos
Вот простой пример, похожий на предыдущий, но на этот раз сопоставленный с запросом HTTP POST:
@RequestMapping(value = "/ex/hi", method = POST)
@ResponseBody
public String postFoos() {
return "Post some hi";
}
Чтобы проверить POST с помощью команды curl :
curl -i -X POST http://localhost:8080/ex/hi
Я запускаю сервер- пишу в терминале gradlew bootRun. и просто перехожу по ссылкам, указанным выше. И GET открывает нормально, а POST нет. Помогите разобраться, пожалуйста
Ответы (1 шт):
Как я понял GET сравнивает адрес и если находит /whoami, то выполняет эту функцию
Немного не так. http клиент (это может быть браузер, или утилита командной строки curl или написанная вами программа) когда посылает http запрос всегда указывает http метод и путь. Метод (впрочем как и путь) - это обязательный параметр. GET и POST - это примеры методов, если и другие.
Когда сервер получает запрос он его обрабатывает, т.е. генерирует ответ по входным параметрам. В спринге для разных http методов можно задать разные обработчики. Параметр method в аннотации @RequestMapping и задает http метод. Т.е. спринг будет искать метод контоллера в котором путь, заданный параметром value и http метод, заданный параметром method совпадают. И вызовет его передав ему входные параметры из запроса (если они есть).
У вас не работает, скорее всего, потому что простой переход по ссылке, или когда вы просто вводите адрес в строку браузера, то выполняется зарос GET. Чтобы выполнить POST нужно либо использовать curl, как у нас написано в вопросе, либо воспользоваться плагином браузера типа postman
Сам код рабочий:
