Spring MVC将HTTP POST请求作为HTTP GET转发给另一个控制器

时间:2013-04-03 16:33:10

标签: java spring jsp model-view-controller

我试图让我的控制器将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来创建一个新模型,其中包含我从pr​​ocessSubmit()收到的参数。问题是当我返回:/ question / get from processSubmit时,请求作为HTTP POST请求转发,服务器返回HTTP状态405 - “请求方法'POST'不受支持。为了构建新模型在QuestionController中,我想我需要从processSubmit()转发HTTP GET请求。

我对Spring Web MVC框架文档进行了一些研究,并且读取重定向前缀可用于将请求转发为来自POST方法的GET请求,但是当我尝试重定向前缀(即return redirect:/question/get)时,服务器返回HTTP 400 - 客户端发送的请求在语法上是不正确的。我做错了什么?

提前致谢。

2 个答案:

答案 0 :(得分:0)

请不要这样做。

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

答案 1 :(得分:0)

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