SpringMVC 400 Bad Request 问题

原创
2014/05/13 15:34
阅读数 3.6W

在提交表单时,发生400错误,并未进入save方法。

@RequestMapping(value="/!save",method = RequestMethod.POST)
    public String save(@ModelAttribute("user") @Valid UserEntity user,
      Locale local,
      BindingResult results){
        String message = messageSource.getMessage("name.not.empty", null, local);
        System.out.println(message);
        if(results.hasErrors())
            return "/user/add";
        return "redirect:/user/list";
    }

经google后,发现大多是因为表单数据类型与model不匹配,造成。
但是,经过一再减少model内容后,提交表单,问题依旧。
终于在iteye论坛发现:springMVC参数顺序不同导致异常

约定的BindingResult必须紧随@valid之后。    

原来我这里的400是这个原因导致的。以下为正确顺序:

@RequestMapping(value="/!save",method = RequestMethod.POST)
    public String save(@ModelAttribute("user") @Valid UserEntity user,
      BindingResult results,
      Locale local){
        String message = messageSource.getMessage("name.not.empty", null, local);
        System.out.println(message);
        if(results.hasErrors())
            return "/user/add";
        return "redirect:/user/list";
    }

在解决问题之后,做一下总结:
springmvc造成400错误的原因现在知道的有以下两点:

1、提交表单数据类型与model不匹配
2、方法参数顺序不正确
还有别的场景吗?希望大家补充。

展开阅读全文
打赏
5
9 收藏
分享
加载中
29
2015/06/10 00:25
回复
举报
model类型不能为private,应为protected/public
2015/04/07 16:59
回复
举报
鱼中鱼博主

引用来自“Gqc_jar”的评论

我这些天遇到了两次这种情况,一种是因为粗心,本来要返回json的却忘了加@RequestBody,另一种是form表单中有日期,Spring不知道该如何转换,如要在实体类的日期属性上加@DateTimeFormat(pattern="yyyy-MM-dd")注解
嗯,谢谢补充。
2014/05/20 18:02
回复
举报
我这些天遇到了两次这种情况,一种是因为粗心,本来要返回json的却忘了加@RequestBody,另一种是form表单中有日期,Spring不知道该如何转换,如要在实体类的日期属性上加@DateTimeFormat(pattern="yyyy-MM-dd")注解
2014/05/20 17:09
回复
举报
嗯嗯
2014/05/13 20:12
回复
举报
更多评论
打赏
5 评论
9 收藏
5
分享
返回顶部
顶部