POST и GET для одного и того же URL - Контроллер - Spring - PullRequest
0 голосов
/ 19 мая 2018

У меня есть этот контроллер:

@Controller
public class HelloWorldController {

    @RequestMapping("/hello.html")
    public ModelAndView helloWorld() {

        String message = "Hello World, Spring 3.0!";
        return new ModelAndView("hello", "message", message);
    }

    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String viewLogin(Map<String, Object> model) {
        User user = new User();
        model.put("userForm", user);
        return "LoginForm";
    }

    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public String doLogin(@Valid  @ModelAttribute("userForm")  User userForm,
            BindingResult result, Map<String, Object> model) {

        if (result.hasErrors()) {
            return "login";
        }

        return "LoginSuccess";
    }
}

У меня есть 2 метода, имеющие разные методы http для одного и того же URL /login, поэтому при нажатии на первый URL-адрес 'localhost:8080/project_name/login' первый метод с GET будет обработан и перенаправит меня на /LoginForm

Так что из моего понимания обработчик второго метода не будет выполнен, так как запрос на /login всегда с GET.

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

Ответы [ 3 ]

0 голосов
/ 19 мая 2018

Хит из браузера для URL localhost:8080/project_name/login будет вызовом GET;поэтому ваш первый метод GET / login будет выполнен.

Чтобы выполнить второй метод, выполните вызов POST из любого клиента Rest, например PostMan или ARC и т. Д.

0 голосов
/ 21 мая 2018

нажмите здесь

Вы можете использовать почтальона для лучшего пути

0 голосов
/ 19 мая 2018

запрос / логин всегда с GET

Я думаю, это то, где вы запутались.Это GET, потому что браузер делает GET вызов по умолчанию.Если вы хотите вызвать второй метод, вам, возможно, придется написать пользовательскую форму / страницу JSP или проверить почтальон , чтобы установить для метода HTTP значение POST.

Вы также можете использовать curl изкомандная строка:

$ curl -d "param1=value1&param2=value2" -X POST http://localhost:3000/data

Если вы хотите иметь возможность совершать POST-вызовы из самого браузера, ознакомьтесь со следующими надстройками браузера: firefox , chrome ,

Если вам не нравятся расширения в вашем браузере, создайте закладку со следующим текстом и используйте ее:

javascript: var% 20my_params = prompt ("Введите% 20your% 20parameters"», "var1 = AAAA & var2 = BBBBB");% 20var% 20Target_LINK = строки ( "Enter% 20destination",% 20location.href);% 20function% 20post (путь,% 20params)% 20 {% 20% 20% 20var%20xForm =% 20document.createElement ( "форма");% 20% 20% 20xForm.setAttribute ( "метод", 20% "пост");% 20% 20% 20xForm.setAttribute ( "действие",% 20path);%20xForm.setAttribute ( "мишень", 20% "_blank");% 20% 20% 20for (вар% 20key% 20in% 20params)% 20 {% 20% 20% 20if (params.hasOwnProperty (ключ))% 20 {% 20% 20% 20% 20% 20% 20% 20% 20% 20var20% скрытое =% 20document.createElement ( "вход");% 20% 20% 20% 20% 20% 20hiddenField.setAttribute ( "название",% 20key);% 20% 20% 20% 20% 20% 20hiddenField.SetAttribute ( "значение",% 20params [ключ]);% 20% 20% 20% 20% 20% 20% 20% 20% 20xForm.appendChild (скрытое);% 20% 20% 20% 20% 20% 20}% 20% 20%} 20% 20% 20document.body.appendChild (XFORM);% 20% 20xForm.submit ();}% 20% 20% 20% 20parsed_params = {};% 20my_params.split ( "&").forEach (функция (пункт)% 20 {Var% 20s% 20% = 20item.split ( "="),% 20k = s [0],% 20V = s 1 * * тысячу двадцать-два;% 20parsed_params [к]% 20 =% 20v;});% 20пост (Target_LINK,% 20parsed_params);% 20void (0);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...