1

我正在使用 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与 匹配的 s searchVo(ModelAttribute)。当 int 或 long 值searchVo不是来自 jsp 时,服务器会抛出 404 page not found 异常。

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

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

我该如何解决这个问题,以及我必须检查服务器代码的哪一部分?

提前致谢。

4

2 回答 2

3

我将继续假设您的问题的一些事情。

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

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

如果primitivePropertyis的类型intlong或者其他一些不能有null值的原始类型,就会出现问题。当 Spring 转换空字符串或非数字字符串值 request-param namedprimitiveProperty时,它不能这样做,因为该字符串不能转换为有效intlong值。所以它被转换为null。现在,当 Spring 尝试将该 null 值分配给一个不能有null值的属性(任何原始类型)时,您会得到一个Exception. 如果你得到一个空字符串作为你的请求参数,你可以用它的等价物替换你的域对象中的麻烦属性wrapper classintwith Integer, longwithLong等等)。如果您从视图中获得非数字值,那么请确保您没有获得非数字值。

于 2013-06-01T16:26:58.447 回答
0

您需要检查给出类型转换问题的字段的设置器,在您的情况下为 MasterVo

Spring 将调用属性的 setter 来绑定值,我想你会看到错误的到来。只需在此设置器中添加一个调试点,您就会看到问题所在。

于 2013-06-01T09:27:54.210 回答