我正在使用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”,则没有问题。
在我看来,这是类型转换的问题。
我怎样才能解决这个问题,以及我必须检查哪部分服务器代码?
提前致谢。
答案 0 :(得分:3)
我会继续并假设你的问题。
这不是type-cast
问题。 Spring有默认转换器,可以轻松地从String
转换为某种原始类型。
现在你面临的是我认为null assigment to primitive type
问题。假设导致问题的property
的名称被命名为primitiveProperty
。现在,请求参数可以包含名为primitiveProperty
的参数,其中包含空字符串值,或者某些值无法转换为数字。如果primitiveProperty
的类型是String,它可以毫无问题地为其分配该参数的值。
如果primitiveProperty
的类型为int
,long
或其他一些不具有null
值的原始类型,则会出现问题。当Spring转换空字符串或名为primitiveProperty
的非数字字符串值request-param时,它不能这样做,因为该字符串无法转换为有效的int
或long
值。所以它被转换为null。现在,当Spring尝试将该null值分配给不能具有null
值(任何原始类型)的属性时,您将获得Exception
。如果要获取空字符串作为request-param,则可以使用等效的wrapper class
(int
替换Integer
,long
替换域对象中的麻烦属性与Long
等等)。如果您从视图中获取非数字值,那么请确保您没有获得非数字值。
答案 1 :(得分:0)
您需要检查提供类型转换问题的字段的setter,在您的情况下 MasterVo 。
Spring会调用属性的setter来绑定值,我猜你会看到错误来了。 只需向此setter添加一个调试点,您就会看到问题。