Тайм-аут контроллера Spring с большим @PathVariable - PullRequest
0 голосов
/ 28 февраля 2012

Хорошо, вот сложная загадка, с которой я боролся сегодня.Сначала вот мой контроллер:

@RequestMapping(value = "/batch/{itemIds:(?:[0-9]+[,]?)+}", method = RequestMethod.DELETE)
public void batchDeleteItem(
        @PathVariable String itemIds,
        Principal principal,
        HttpServletResponse httpServletResponse) throws CustomException {

    for (String itemIdString: itemIdString.split(",")) {
        long
            itemId = Long.parseLong(itemIdString.trim());
        itemService.deleteItem(principal.getName(), itemId);
    }

    httpServletResponse.setStatus(HttpServletResponse.SC_ACCEPTED);
}

В случае, если это не очевидно, идея состоит в том, чтобы удалить группу элементов за один вызов контроллера.Описанный выше метод работает примерно для 5 пунктов, но если указано 6+, время ожидания истекает.Я поместил логгеры в код контроллера, и они даже не распечатываются!Другими словами,

РАБОТАЕТ:

  • curl -u test: pass 'http://localhost:8080/rest/item/batch/23,24,25,26,27' -X DELETE
  • Возвращает ACCEPTED
  • Элементы удаляются

ВРЕМЯ ВЫХОДА:

  • curl -u test: pass 'http://localhost:8080/rest/item/batch/23,24,25,26,27,28,29,30,31,32,33' -X DELETE
  • Зависание навсегда (или время клиентаout)
  • Элементы не удаляются

Есть идеи?Заранее спасибо!

ОБНОВЛЕНИЕ:

Сейчас я работаю над этой проблемой, заставляя клиента указывать тело запроса в формате CSV (а не в самом URL).К сожалению, это означает использование HTTP PUT вместо HTTP DELETE.Я все еще оставлю этот вопрос открытым, если кто-нибудь сможет выяснить, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...