我刚刚开始学习spring mvc 3.我发现了一个小问题,我的控制器会处理一个帖子请求(注册表单)。但是如果在地址栏中键入映射值(bla3 / save.html),它将执行它不应该的方法。这就是为什么我需要一个解决方案,如果有人直接输入地址,它应该重定向到其他页面而不是尝试添加新用户。
@RequestMapping(value = "/save", method = RequestMethod.POST) //save new user
public ModelAndView saveUser(@ModelAttribute("user") User user, BindingResult result){
userService.addUser(user);
return new ModelAndView("redirect:/users.html");
}
答案 0 :(得分:3)
如果您的地址栏中直接有URL,那么您可以使用GET请求来处理不同的行为,例如:此URL禁止GET,或者在提交POST方法时提交用户的空白表单。
@RequestMapping(value = "/save", method = RequestMethod.GET)
public ModelAndView saveUser(@ModelAttribute("user") User user, BindingResult result){
userService.addUser(user);
}
答案 1 :(得分:1)
在控制器类中添加此方法。
@RequestMapping(value = "bla3/save", method = RequestMethod.GET)
public ModelAndView saveUser(@ModelAttribute("user") User user, BindingResult result){
userService.addUser(user);
...
return new ModelAndView("redirect:/users.html");
}
如果在地址栏中输入映射值(bla3 / save.html)。此方法将执行。
答案 2 :(得分:0)
只有当存在特定标题时才能执行该方法,如下面的代码。
@RequestMapping(value = "/save", method = RequestMethod.POST, headers="X-Requested-With=XMLHttpRequest")
在这种情况下,该方法仅在jquery ajax请求时执行(jQuery自动添加标题)
当然这只是Poka-yoke