#spring-boot #spring-mvc
Вопрос:
@RequestMapping(value = "/abc", method = RequestMethod.POST) public class TestController { ..... }
что делать, если пользователь запросит /abc
в качестве GET
метода, как я могу обработать запрос?
Ответ №1:
Вы получите исключение:
Request method 'GET' not supported
Вы можете поддерживать несколько методов (GET,POST…), удалив метод в аннотации.
@RequestMapping(value = "/abc")
Ответ №2:
Да, это возможно. Post /abc
может добавлять данные List
и redirect:/abc
перенаправлять их для получения отображения value = "/abc", method = RequestMethod.GET
и передачи данных через модель для просмотра.
Запрос URL GET
-адреса и POST
совпадают, но сначала перенаправление на URL-адрес, а затем отправка данных для просмотра
Контроллер
private Listlt;Stringgt; someData = new ArrayListlt;gt;(); @RequestMapping(value = "/abc", method = RequestMethod.POST) public String TestControllerPost(String something) { someData.add(something); return "redirect:/abc"; // going to /abc get url } @RequestMapping(value = "/abc", method = RequestMethod.GET) public String TestControllerGet(Model model) { model.addAttribute("someData", someData); return "index"; }
Вид как Thymeleaf(index.html)
lt;!DOCTYPE htmlgt; lt;html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"gt; lt;bodygt; lt;form action="/abc" method="post"gt; lt;spangt;User Name:lt;/spangt; lt;input type="text" name="name"/gt; lt;br/gt; lt;input type="submit" value="Submit"gt; lt;/formgt; lt;brgt; lt;h3gt;Get Datalt;/h3gt; lt;p th:each="data: ${someData}"gt; lt;span th:text="${data}"gt;lt;/spangt; lt;/pgt; lt;/bodygt; lt;/htmlgt;
Комментарии:
1. что делать, если в этом случае пользователь сначала запросит метод GET? как я могу получить
someData
ссылку на объект2. Но как пользователь запрашивает
GET
метод… пользователь сначала переходит кPOST
методу, затем публикует метод, отправляет пользователя вGET
метод черезredirect:/abc
3. Этот оба метода вызываются вместе, когда пользователь нажимает на кнопку, но не работает при открытии окна