исключение преобразования типа весной mvc3 - PullRequest
0 голосов
/ 02 апреля 2012

Я использую sping3 mvc в моем приложении.

У меня есть несколько объектов, которым требуется операция CRUD.

При запросе записи может потребоваться разбиение на страницы, поэтому я создаю класс Pagination:

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

Это мой Дао:

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 нет параметра page или pageSize, он выдаст исключение typeconvert, фактически я знаю, что могу перенаправить на страницу исключения, но я этого не хочу. Я хочу использовать некоторые настройки по умолчанию в этом случае, например:

http://xx/post/list ==> вернуть все записи без нумерации страниц

http://xx/post/list?page=1&pageSize=10&sort=id ==> нумерация страниц

http://xx/post/list?page=1 ==> разбиение на страницы со стандартным размером страницы (может быть 10) и сортировка (id)

http://xx/post/list?page=notnumber&pageSize=10 ==> разбиение на страницы со страницей = 1

Тогда я хочу знать, где и как проверить и сбросить параметр Pagination?

Ответы [ 2 ]

0 голосов
/ 03 апреля 2012

Вы должны понимать, что параметры, которые вы отправляете для запроса, будут преобразованы из 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 "";

}

0 голосов
/ 02 апреля 2012

Вы можете изменить тип данных вашего параметра int page и pageSize на String page и String pageSize, и после этого вы можете просто проверить, не переданы ли значения параметров на NULL. Если значение параметра не равно нулю, используйте переданное значение, в противном случае используйте значение по умолчанию. как это

<code>@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 "";
}
...