Spring MVC出现POST 400 Bad Request &405 Request method 'GET' not supported
首先描述一下出现错误的情景:
我刚学springmvc,想做一个登录界面的东西。然后试着写了一个controller如下:
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login( String name,
String password, Model model) {
User u = userService.login(name, password);
if (u == null)
throw new UserException("no user exist!");
if (!u.getPassword().equals(password)) {
throw new UserException("password is not right!");
}
model.addAttribute("loginUser", u);
return "redirect:/user/users";
}
然后就出现了 400 badrequest这个错误了。网上找资料,说是属性不匹配吧,于是找jsp页面的错误,没有不匹配的地方,于是添加
log4j.logger.org.springframework.web=debug到log4j日志里面,果然出现错误的地方了。究其原因是
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public String show(@PathVariable int id, Model model) {
model.addAttribute("user", userService.load(id));
return "user/show";
}
因为这个mapping地址localhost:8080/xxx/user/id(int类型)的,
login的mapping地址localhost:8080/xxx/user/login(String类型)的,
所以在dispatch的时候,spring误认为是要去访问show这个方法,就造成了数据类型不匹配,也就是String型无法转变为int类型的错误,也就造成了400 bad request错误了,如此,解决方法就是在show方法的
@RequestMapping(value = "/{id}", method = RequestMethod.GET)改为
@RequestMapping(value = "show/{id}", method = RequestMethod.GET)这样就区别开了。
到此,第一个问题解决。方法是
- 先检查一下数据类型是否匹配。
- 自己检查不到,就用控制台输出一个debug信息,然后查看,Springmvc中
log4j.logger.org.springframework.web=debug到log4j日志里面 - 查看信息,修改即可。
405 Request method ‘GET’ not supported
这个错误,纯属自己的问题了,我也查看了jsp页面提交方法是post,然后controller的方法也是method = RequestMethod.POST,怎么会出现GET请求呢?原来是我直接访问login页面。
我在controller中写了一个方法,将视图转到login页面就解决了
如下:
@RequestMapping(value="",method=RequestMethod.GET)
public String index(){
return "user/login";
}
另,附上我在网上查找资料的时候,别人遇到的一些错误原因:
@Controller
@RequestMapping("/newPost.htm")
public class NewPostController{
@Autowired
PostsBusinessDelegate postsBusinessDelegate = null;
@Autowired
AddNewPostFormBean addNewPostFormBean = null;
@RequestMapping(method=RequestMethod.GET)
public String getCreateForm(Model model) {
model.addAttribute(addNewPostFormBean);
return "/newPost.htm";
}
@RequestMapping(method=RequestMethod.POST)
public String create(AddNewPostFormBean article, BindingResult result, HttpServletRequest request) {
if (result.hasErrors()) {
return "/newPost.htm";
}
postsBusinessDelegate.addNewPost((User) request.getSession().getAttribute("CURRENT_USER"), article);
return "redirect:/index.htm";
}
@RequestMapping(***method=RequestMethod.GET***)
public String getView(Model model) {
AddNewPostFormBean anpfb = this.addNewPostFormBean;
if (anpfb == null) {
return "/newPost.htm";
}
model.addAttribute(anpfb);
return "/newPost.htm";
}
@ExceptionHandler(Exception.class)
public String exception(Throwable t)
{
return "/index.htm";
}
<form:form method="post" >
<form:errors path="*"/>
<p>Title: <form:input path="articleTitle" size="45" maxlength="60"/></p>
<form:select path="categoryId">
<form:option value="Select Category..."></form:option>
<c:forEach items="${sessionScope.CATEGORIES}" var="category" varStatus="index">
<form:option value="${category.categoryId}" label="${category.categoryName}"></form:option>
</c:forEach>
</form:select>
<form:textarea path="articleText" id="editor1"/>
<div class="buttons">
<input type="submit" value="Add Post" />
</div>
</form:form>
这个问题主要出现在有两个GET,不知道映射哪个。controller中create跟getView方法
如有错误,请指出,刚学习springmvc不久。谢谢!
Spring MVC出现POST 400 Bad Request &405 Request method 'GET' not supported的更多相关文章
- Spring Mvc 在非controller层 实现获取request对象
一般我们在Controller层,会编写类似这样的方法 @Controller @RequestMapping(value="/detail") public class GetU ...
- Spring Mvc Http 400 Bad Request问题排查
如果遇到了Spring MVC报错400,而且没有返回任何信息的情况下该如何排查问题? 问题描述 一直都没毛病的接口,今天测试的时候突然报错400 Bad Request,而且Response没有返回 ...
- 戏说 Spring MVC 框架
Spring MVC 是 Spring 框架的一部分,和 Struts 一样都是属于 web 层框架,根据项目分层的思想,一个项目基本可以分为持久层,业务层和 web 层.而 Spring MVC 主 ...
- spring + spring mvc + tomcat 面试题(史上最全)
文章很长,而且持续更新,建议收藏起来,慢慢读! 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 + 社群大片好评 < Java 高并发 三 ...
- Spring Data MongoDB example with Spring MVC 3.2
Spring Data MongoDB example with Spring MVC 3.2 Here is another example web application built with S ...
- spring mvc controller中获取request head内容
spring mvc controller中获取request head内容: @RequestMapping("/{mlid}/{ptn}/{name}") public Str ...
- An overview of the Spring MVC request flow
The Spring MVC request flow in short: When we enter a URL in the browser, the request comes to the d ...
- spring mvc DispatcherServlet详解之三---request通过ModelAndView中获取View实例的过程
整个spring mvc的架构如下图所示: 上篇文件讲解了DispatcherServlet第二步:通过request从Controller获取ModelAndView.现在来讲解第三步:reques ...
- spring mvc DispatcherServlet详解之二---request通过Controller获取ModelAndView过程
整个spring mvc的架构如下图所示: 上篇文件讲解了DispatcherServlet通过request获取控制器Controller的过程,现在来讲解DispatcherServletDisp ...
随机推荐
- hashlib —— Python 的 md5 和 sha1 加密
python的md5和sha1加密 0. md5 与 sha1 MD5 的全称是 Message-Digest Algorithm 5(信息-摘要算法).128 位长度.目前 MD5 是一种不可逆算法 ...
- js无缝滚动原理及详解[转自刹那芳华]
刚刚接触JS,网上找了一些关于无缝滚动的教程,但都大同小异,对我这种新手来说也只是会用,不知道什么意思,想要自己写个更是一头雾水.于是找了一些资料,详细说明一下JS无缝滚动的原理,相信看过这篇文章之后 ...
- 1.1 Introduction中 Putting the Pieces Together官网剖析(博主推荐)
不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Putting the Pieces Together 拼在一起 This comb ...
- 1.1 Introduction中 Kafka for Stream Processing官网剖析(博主推荐)
不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Kafka for Stream Processing kafka的流处理 It i ...
- 使用node.js+babel,支持import/export语法
如果要在node里面支持import/export default语法步骤: 1.使用npm安装 babel的客户端工具 npm init 会生成package.json文件 2.接着安装bebel客 ...
- python之经典猜数字
题目:猜数字1.让用户输入1-20,猜数字,可以猜5次.2.每次有提示,大了,或者小了!3.如果超过5次,提示game over. # !/usr/bin/env python # -*- codin ...
- finalkeyword对JVM类载入器的影响
众所周知,当訪问一个类的变量或方法的时候.假设没有初始化该类.就会先去初始化一个类 可是,当这个类的变量为final的时候,就不一定了 请看以下的样例 package com.lala.shop; i ...
- [转]MySQLHelper类
本文转自:http://de.cel.blog.163.com/blog/static/5145123620110181003903/ 类似于SQLHelper,只是这里引用的是MySql.Data类 ...
- Redo current损坏
如果损坏的是current redo log (select group#,sequence#,archived,status from v$log;) 有两种情况: A. 数据库是正常关闭 ...
- Python 极简教程(二)编码工具
Python 的编码工具很多.目前最流行的是 pycharm,关于 pycharm 的安装使用请参考 PyCharm安装使用教程. 而学习过程中,我觉得最好用的,还是 Python 自带的练习工具 I ...