我有这个控制器:
@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个方法对同一个网址/login
使用不同的http方法
所以当点击第一个网址&#39; localhost:8080/project_name/login
&#39;将处理GET
的第一种方法,并将我重定向到/LoginForm
因此,根据我的理解,第二个方法处理程序将不会执行,因为/login
的请求始终为GET.
如果我的理解是错误的,请向我解释第二种方法如何得到满足和感谢。
答案 0 :(得分:3)
/ login的请求总是使用GET
我认为这是你感到困惑的地方。它是GET,因为默认情况下浏览器会进行GET调用。如果您想要唤起第二种方法,您可能必须编写自定义表单/ JSP页面或签出postman以将HTTP方法设置为POST。
您也可以从命令行使用curl:
$ curl -d "param1=value1¶m2=value2" -X POST http://localhost:3000/data
如果您希望能够从浏览器本身进行POST调用,请查看以下浏览器加载项: firefox,chrome,
如果您不喜欢浏览器中的扩展程序,请使用以下文本创建书签并使用它:
的javascript:VAR%20my_params =提示符( “输入%20your%20parameters”, “VAR1 = AAAA&安培; VAR2 = BBBBB”);%20var%20Target_LINK =提示符( “输入%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(VAR%20key%20英寸%20params)% 20 {%20%20%20if(params.hasOwnProperty(键))%20 {%20%20%20%20%20%20%20%20var%20hiddenField%20 =%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(hiddenField);%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 {风险%20秒。 %20 =%20item.split( “=”),%20K = S [0],%20V = S 1;%20parsed_params [K]%20 =%20V;});%20PO ST(TARGET_LINK,%20parsed_params);%20void(0);
答案 1 :(得分:1)
来自浏览器的网址localhost:8080/project_name/login
的点击将是GET通话;所以你的第一个/登录GET方法将被执行。
答案 2 :(得分:0)
你可以使用邮递员更好的方式