Spring MVC - 当ModelAttribute的int值为null时抛出异常

时间:2013-06-01 08:38:16

标签: spring jsp model-view-controller http-status-code-404 modelattribute

我正在使用Spring 3.0 MVC构建Web应用程序。

我有一个方法,下面有原型。

@RequestMapping(value = "/blahblah/blah.do", method=RequestMethod.GET) 
public void searchData(@RequestParam(value="uniqOid", required=false) String uniqOid, @ModelAttribute("MasterVo") MasterVo searchVo,
          ModelMap model, HttpServletResponse response, HttpServletRequest request)

问题是,视图(jsp)包含与input匹配的searchVo(ModelAttribute)。 当searchVo的int或long值不是来自jsp时,服务器会抛出404页面未找到异常。

如果值的类型是“String”,则没有问题。

在我看来,这是类型转换的问题。

我怎样才能解决这个问题,以及我必须检查哪部分服务器代码?

提前致谢。

2 个答案:

答案 0 :(得分:3)

我会继续并假设你的问题。

这不是type-cast问题。 Spring有默认转换器,可以轻松地从String转换为某种原始类型。

现在你面临的是我认为null assigment to primitive type问题。假设导致问题的property的名称被命名为primitiveProperty。现在,请求参数可以包含名为primitiveProperty的参数,其中包含空字符串值,或者某些值无法转换为数字。如果primitiveProperty的类型是String,它可以毫无问题地为其分配该参数的值。

如果primitiveProperty的类型为intlong或其他一些不具有null值的原始类型,则会出现问题。当Spring转换空字符串或名为primitiveProperty的非数字字符串值request-param时,它不能这样做,因为该字符串无法转换为有效的intlong值。所以它被转换为null。现在,当Spring尝试将该null值分配给不能具有null值(任何原始类型)的属性时,您将获得Exception。如果要获取空字符串作为request-param,则可以使用等效的wrapper classint替换Integerlong替换域对象中的麻烦属性与Long等等)。如果您从视图中获取非数字值,那么请确保您没有获得非数字值。

答案 1 :(得分:0)

您需要检查提供类型转换问题的字段的setter,在您的情况下 MasterVo

Spring会调用属性的setter来绑定值,我猜你会看到错误来了。 只需向此setter添加一个调试点,您就会看到问题。