我想像这样使用@RequestParam注释:
@RequestMapping
public void handleRequest( @RequestParam("page") int page ) {
...
}
但是,如果用户使用URL参数进行调整并尝试转到“abz”页面或非数字页面,我想显示第1页。现在,我可以让Spring做的最好的事情是返回500.有没有办法干净地覆盖这个行为,而不必将参数作为字符串接受?
我查看了@ExceptionHandler注释,但是当我设置使用@ExceptionHandler(TypeMismatchException.class)
时它似乎没有做任何事情。不知道为什么不。
建议?
P.S。加分问题:Spring MVC被称为Spring MVC。带有注释的Spring MVC是否叫做Spring @MVC?谷歌将它们视为同名,这很烦人。
答案 0 :(得分:10)
ConversionService
是一个不错的解决方案,但是如果您为请求添加空字符串(例如?page=
,则它缺少值。根本不会调用ConversionService,但page
是设置为null
(如果是Integer
)或者抛出异常(如果是int
)
这是我首选的解决方案:
@RequestMapping
public void handleRequest( HttpServletRequest request ) {
int page = ServletRequestUtils.getIntParameter(request, "page", 1);
}
这样你总是有一个有效的int参数。
答案 1 :(得分:8)
从Spring 3.0开始,您可以设置ConversionService
。 @InitBinder
的{{1}}指定了将该服务应用于的唯一参数:
value