Javax.servlet.HttpServletRequest.getContentLength() возвращает int only

Чтобы иметь дело с большим телом запроса в HTTP POST или PUT, полагаться на HttpServletRequest.getContentLength() не является хорошей идеей, так как он возвращает только целые значения, или -1 для тел запросa > 2 ГБ.

Однако я не вижу причин, почему не следует допускать более крупные органы запроса. RFC 2616 говорит

Любое содержимое-длина, большее или равное нулю, является допустимым значением.

Можно ли использовать HttpServletRequest.getHeader('content-length') и проанализировать его на Long вместо?

Ответ 1

Да, это прекрасный подход - используйте getHeader("Content-Length") (заглавные буквы) и Long.parseLong(..). Я считаю, что это контейнер, но он ограничен int по спецификации serlvet.

Ответ 2

Начиная с сервлета 3.1 (Java EE 7), доступен новый метод getContentLengthLong():

long contentLength = request.getContentLengthLong();

То же самое относится к его аналогу по отклику, setContentLengthLong():

response.setContentLengthLong(file.length());