Spring Boot - POST请求方法不起作用,但GET做了

时间:2016-02-06 18:21:50

标签: java spring spring-mvc spring-boot

我正在学习Spring Boot,我写了一个小应用程序。该应用程序具有此控制器:

@Controller
@RequestMapping("/")
public class ApplicationController {

   @RequestMapping(value="/account", method = RequestMethod.POST) 
   public String getAccountVo(ModelMap model) {
       AccountVO vo = new AccountVO();
       vo.setAccountNo("0102356");
       vo.setAccountHolderName("Dinesh");

       model.addAttribute("acc", vo);

       return "account";
   }
}

...而页面(视图)是:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Account Details</title>
</head>
<body>
    <form>
        Account number <input type="text" name="acctNo" value="${acc.getAccountNo()}"><br>
        Account Holder Name <input type="text" name="name" value="${acc.getAccountHolderName()}"><br>
    </form>
</body>
</html>

当我运行应用程序时,我得到HTTP Status 405消息Request method 'GET' not supported。但当我将@RequestMapping注释中的方法更改为method=RequestMethod.GET时,我得到了预期的页面。

为什么会这样?

1 个答案:

答案 0 :(得分:4)

@RequestMapping(value="/account", method = RequestMethod.POST)

这意味着getAccountVo方法处理程序负责POST端点上的/account请求。因此,当您向GET端点发出/account请求时,由于您尚未定义任何方法处理程序来处理该请求,因此Spring会使用405 Method Not Supported进行投诉。

如果你的目的是要有一个表单处理工作流程,一个典型的方法是在/account端点上定义两个方法处理程序:一个用于显示表单,另一个用于处理提交的表单,有点像:

@Controller
@RequestMapping("/")
public class ApplicationController {

   @RequestMapping(value="/account", method = RequestMethod.GET) 
   public String displayAccountForm(...) {
       // do whatever suits your requirements

       return "account";
   }

   @RequestMapping(value="/account", method = RequestMethod.POST) 
   public String handleSubmittedForm(...) {
       // do whatever suits your requirements

       return "successPage";
   }
}