0

我试图让我的控制器使用一些参数将 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 - The request sent by客户端在语法上不正确。我究竟做错了什么?

提前致谢。

4

2 回答 2

0

只是不要那样做。

在辅助方法中分解出两个控制器方法之间的公共部分,并从两个控制器方法中调用此辅助方法。

于 2013-04-03T16:43:42.927 回答
0

原因是the uri of /question/get requires params(firstName, lastName, ssn),但是当重定向到它时,你什么也没给它。也许可以帮助你:)

于 2013-04-04T12:38:39.677 回答