Spring Controller使用大型@PathVariable超时

时间:2012-02-28 05:19:05

标签: regex spring rest spring-mvc

好的,所以这是我今天一直在努力解决的棘手问题。首先是我的控制器:

@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+项时,呼叫超时。我把记录器语句放在控制器代码中,它们甚至都不打印!换句话说,

WORKS:

  • curl -u test:传递'http:// localhost:8080 / rest / item / batch / 23,24,25,26,27'-X DELETE
  • 返回ACCEPTED
  • 项目已删除

TIMES OUT:

  • curl -u test:传递'http:// localhost:8080 / rest / item / batch / 23,24,25,26,27,28,29,30,31,32,33' -X DELETE < / LI>
  • 永远挂起(或客户超时)
  • 不删除项目

有什么想法吗?提前谢谢!

更新:

现在,我正在通过让客户端指定请求的CSV格式主体(而不是URL本身)来解决此问题。不幸的是,这意味着使用HTTP PUT而不是HTTP DELETE。如果有人能弄清楚发生了什么,我仍会把这个问题保持开放。

0 个答案:

没有答案