Spring @MVC和@RequestParam验证

时间:2010-02-18 09:05:12

标签: spring spring-mvc

我想像这样使用@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?谷歌将它们视为同名,这很烦人。

2 个答案:

答案 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