在spring mvc3中输入转换异常

时间:2012-04-02 02:40:26

标签: spring spring-mvc pagination

我在我的应用程序中使用了sping3 mvc。

我有一些需要CRUD操作的实体。

查询记录时,可能需要分页,因此我创建了Pagination类:

class Pagination{
  int page,
  int pageSize,
  String sort;
}

这是我的Dao:

public List<Post> list(Pagination pagination) {
             /////
    return xxx;
}

在控制器中:

@RequestMapping(value = "/", method = RequestMethod.GET)
public String list(@RequestParam int page,@RequestParam int pageSize,@RequestParam String sort) {
            List<Post> posts=postDao.list(new Pagination(page,pageSize,sort));
    return "";
}

现在,如果httprequest中没有pagepageSize参数,它将抛出typeconvert异常,事实上,我知道我可以重定向到异常页面,但我不想这样做。在这种情况下,我想使用一些默认配置,例如:

http://xx/post/list ==&gt;返回所有没有分页的记录

http://xx/post/list?page=1&pageSize=10&sort=id ==&gt;分页

http://xx/post/list?page=1 ==&gt;使用默认的pageSize(可能是10)和sort(id)

进行分页

http://xx/post/list?page=notnumber&pageSize=10 ==&gt;分页与页面= 1

然后我想知道在哪里以及如何验证和重置分页参数?

2 个答案:

答案 0 :(得分:0)

您可以将int page和pageSize的参数数据类型更改为String page和String pageSize,执行此操作后,您只需检查传递的参数值是否为null。如果参数值不为null,则使用传递的值,否则使用默认值。 像这样

@RequestMapping(value = "/", method = RequestMethod.GET)
public String list(@RequestParam String page,@RequestParam String pageSize,@RequestParam String sort) {
       if(page ==null)
             page=1; // assign page default value 1 because user didn't pass page value.
       if(pageSize==null)
             pageSize=10; // assign pageSize default value 10 because user didn't pass pageSize value.
      List posts=postDao.list(new Pagination(page,pageSize,sort));
    return "";
}

答案 1 :(得分:0)

您必须了解您为请求发送的参数将从String转换为int,因为如果直接接收String并调用Pagination的构造函数,则更好。

您可以使用条件指令内联或其他逻辑,直到u。 在这个方法中,你只会在被通知时调用构造函数Pagination传递请求的值,另一种方法将发送你必须放入常量的默认值。

@RequestMapping(value = "/", method = RequestMethod.GET)
public String list(@RequestParam String page, @RequestParam String pageSize, @RequestParam   String sort) {
  List posts = postDao.list(new Pagination(
      StringUtils.isEmpty(page) ? page : "1",
      StringUtils.isEmpty(pageSize) ? pageSize : "15",
      StringUtils.isEmpty(sort) ? sort : "asc"));
  return "";

}