我正在学习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
时,我得到了预期的页面。
为什么会这样?
答案 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";
}
}