0

我刚开始学习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");
}
4

3 回答 3

3

如果您在地址栏中直接有 URL,这将是一个 GET 请求,您可以针对该请求处理不同的行为,例如,该 URL 禁止使用 GET,或者在提交时为用户呈现空白表单,将调用 POST 方法之上。

@RequestMapping(value = "/save", method = RequestMethod.GET)
public ModelAndView saveUser(@ModelAttribute("user") User user, BindingResult result){
    userService.addUser(user);  

}
于 2012-11-14T07:08:58.250 回答
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)。该方法将执行。

于 2012-11-14T11:19:38.570 回答
0

您可以让该方法仅在有特定标头(如下面的代码)时才执行。

 @RequestMapping(value = "/save", method = RequestMethod.POST, headers="X-Requested-With=XMLHttpRequest")

在这种情况下,该方法仅在它是 jquery ajax 请求时执行(jQuery 自动添加标头)

当然,这只是一种 Poka-yoke

于 2012-11-14T06:52:36.103 回答