SpringMvc报错,[org.springframework.web.HttpRequestMethodNotSupportedException: Request method ‘POST’ not supported]
不能post
起初以为是@RequestMapping没有放行post等等,,各种百度折腾了一天没有解决,只能全部改成Get。
晚上才找到了问题的原因
代码如下
@Controller
@RequestMapping
public class LoginController {
@Autowired
UserDao userDao;
@RequestMapping(value = "userLogin")
public String Userlogin(@RequestParam(value = "name") String name, @RequestParam(value = "password") String password,
HttpServletRequest request) {
User user = userDao.getUserByUserNameAndPassWord(name, password);
if (user == null)
return "redirect:/error/cantFind";
else {
HttpSession session = request.getSession(true);
session.setAttribute("User", user);
}
//如果那么写就不能post,只能get
return "UserOptions.html";
// return "redirect:/UserOptions.html";
}
可以看到这里放行了Post和Get等所有请求,但是却报了405错误 折腾了一天后发现并不是没有放行,而是返回语句这里Get方法才能直接返回一个html,如果是Post需要使用重定向的方法
return “redirect:/UserOptions.html”
如果加上了个@ResponseBody
此时可以post 但是
返回的并不是我们想要的页面而是一个json。
@ResponseBody的作用其实是将java对象转为json格式的数据。
@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。
注意:在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
@ResponseBody是作用在方法上的,@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】。
注意:在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。 比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。@RequestBody 将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。
所以解决方法为
return "redirect:/UserOptions.html";
返回一个重定向
至于为啥不是很清楚 欢迎