springMVC Requestmapping失效界面提示404-参数绑定失败
问题为某一个@Controller下配置了四个@RequestMapping其中有两个可以访问而另外两个访问之后为404错误.
查看了spring_mvc-servlet文件,四个方法都有注册。而且此处如果没有注册应该会返回到首页登录,也不会发生404的错误。
@RequestMapping("/account/invests") 使用的配置为很普通的配置方式
如果出现以上问题还可以定位问题到参数上,RequestMapping绑定的url还和参数有关。这里排查后的问题为,参数绑定
失败,而且是int类型的参数
1. 基本数据类型(以int为例,其他类似):
Controller代码:
@RequestMapping("saysth.do") public void test(int count) { }
表单代码:
<form action="saysth.do" method="post"> <input name="count" value="10" type="text"/> ...... </form>
表单中input的name值和Controller的参数变量名保持一致,就能完成数据绑定,如果不一致可以使用@RequestParam注解。需要注意的是,如果Controller方法参数中定义的是基本数据类型,但是从页面提交过来的数据为null或者”"的话,会出现数据转换的异常。也就是必须保证表单传递过来的数据不能为null或”",所以,在开发过程中,对可能为空的数据,最好将参数数据类型定义成包装类型,具体参见下面的例子。
包装类型(以Integer为例,其他类似):
Controller代码:
@RequestMapping("saysth.do") public void test(Integer count) { }
表单代码:
<form action="saysth.do" method="post"> <input name="count" value="10" type="text"/> ...... </form>
和基本数据类型基本一样,不同之处在于,表单传递过来的数据可以为null或”",以上面代码为例,如果表单中num为”"或者表单中无num这个input,那么,Controller方法参数中的num值则为null。
而当前项目出现的问题就是将参数中的分页page和rows定义成了int类型,而且调用url没有传参。更换为Integer即可.
在spring mvc中参数的绑定还提供了 @RequestParam(defaultValue="0") 给int一个默认的值也可以解决这个问题。