• 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)这样就区别开了。
    到此,第一个问题解决。方法是

    1. 先检查一下数据类型是否匹配。
    2. 自己检查不到,就用控制台输出一个debug信息,然后查看,Springmvc中log4j.logger.org.springframework.web=debug到log4j日志里面
    3. 查看信息,修改即可。

    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不久。谢谢!

  • 相关阅读:
    vuex入门
    element-UI快速上手例子运行失败
    Fix协议
    KDB+
    GO基础知识(基础数据类型之字符串、常量)
    如何实现一个通用的、高性能的排序函数
    线性排序(如何根据年龄给100万用户数据排序)
    【转】OpenResty 究竟解决了什么痛点
    idea项目常用的设置
    php站点ajax请求返回数据异常处理的经历
  • 原文地址:https://www.cnblogs.com/jpfss/p/9670475.html
Copyright © 2020-2023  润新知