【发布时间】:2013-04-03 16:33:09
【问题描述】:
我试图让我的控制器使用一些参数将 POST 请求转发到另一个控制器:
@Controller
@RequestMapping("/register")
public class RegisterController {
//...
@RequestMapping(method=RequestMethod.POST)
public String processSubmit(@Valid Voter voter, BindingResult result, HttpServletRequest request) {
//...
request.setAttribute("firstName", voter.getFirstName());
request.setAttribute("lastName", voter.getLastName());
request.setAttribute("ssn", voter.getSsn());
logger.info("VoterID exists, returning redirect:/question/prepare");
return "forward:/question/get";
}
}
@Controller
@RequestMapping("/question")
public class QuestionController {
//...
@RequestMapping(value="/get", method=RequestMethod.GET)
public String prepareVoterBean(@RequestParam String firstName,
@RequestParam String lastName, @RequestParam String ssn, Model model) {
logger.info("QuestionController got GET REQUEST for " + firstName + lastName + ssn);
VoterBean bean = new VoterBean();
bean.setFirstName(firstName);
bean.setLastName(lastName);
bean.setSsn(ssn);
model.addAttribute("questions",bean);
return "questionPage";
}
}
我正在尝试编写 QuestionController 以使用从 processSubmit() 收到的参数创建一个新模型。问题是当我从 processSubmit 返回:/question/get 时,请求作为 HTTP POST 请求转发,并且服务器返回 HTTP 状态 405 -“不支持请求方法'POST'。为了构建新模型在 QuestionController 中,我想我需要从 processSubmit() 转发 HTTP GET 请求。
我对 Spring Web MVC 框架文档进行了一些研究,并阅读了重定向前缀可用于将请求作为 POST 方法的 GET 请求转发,但是当我尝试重定向前缀(即return redirect:/question/get)时,服务器返回 HTTP 400 - 客户端发送的请求在语法上不正确。我做错了什么?
提前致谢。
【问题讨论】:
-
对于 400 错误,
redirect尝试向您的其他控制器方法发送 GET 请求,但该方法需要您的新请求可能没有的不同RequestParams,因此会失败。
标签: java spring jsp model-view-controller