Хорошо, вот сложная загадка, с которой я боролся сегодня.Сначала вот мой контроллер:
@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.Я все еще оставлю этот вопрос открытым, если кто-нибудь сможет выяснить, что происходит.