IllegalStateException: getInputStream () уже был вызван для этого запроса - PullRequest
2 голосов
/ 03 апреля 2012

Получение недопустимого исключения из состояния, когда я пытаюсь получить Buffered Reader из HttpServletResponse, говорящего мне, что getInputStream уже был вызван. Однако getReader - это первая строка кода, и я вообще не вызываю getInputStream ...

Сервер:

@POST
@Path("/getReport")
@Produces(MediaType.TEXT_HTML)
@Consumes(MediaType.APPLICATION_JSON)
public void getReport(@Context HttpServletRequest servletRequest, @Context HttpServletResponse servletResponse, @Context UriInfo uriInfo )
            throws ServletException, IOException{

JSONObject jobj =  new JSONObject(new JSONTokener(servletRequest.getReader()));

Ответы [ 2 ]

2 голосов
/ 27 мая 2014

Похоже, что структура рестлета вызвала getRequestEntityStream () для объекта Request, который, в свою очередь, вызывает getInputStream (), поэтому вызов getReader () для запроса вызывает исключение IllegalStateException.

Документация API сервлетов для getReader () и getInputStream () гласит:

 public java.io.BufferedReader getReader()
    ...
    ...
Throws:
    java.lang.IllegalStateException - if getInputStream() method has been called on this request

 public ServletInputStream getInputStream()
    ...
    ...
    Throws:
    java.lang.IllegalStateException - if the getReader() method has already been called for this request

Из документации видно, что я не могу вызвать getReader () и getInputStream () для объекта Request (хотя это делал не я).

Вместо этого мне пришлось использовать getInputStream (), а не getReader ().

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

Запрещено писать как servletRequest.getReader(), так и servletRequest.getInputStream(). Я думаю, что servletRequest.getInputStream() также был вызван, что приводит к IllegalStateException.

...