2016-02-06 106 views
2

我正在学习Spring Boot,现在我写了一个小应用程序。该应用程序有此控制器:Spring Boot - POST请求方法不起作用,但GET做了

@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时,我得到了预期的页面。

为什么会发生这种情况?

回答

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

这意味着getAccountVo方法处理程序负责对/account端点POST请求。因此,当您向/account端点发出GET请求时,由于您尚未定义任何方法处理程序来处理该问题,因此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"; 
    } 
} 
相关问题