2012-04-03 225 views
2

當我嘗試從HttpServletResponse中獲取緩衝讀取器告訴我getInputStream已被調用時,獲取非法狀態異常。 然而getReader是第一行代碼,我不會打電話的getInputStream在所有...IllegalStateException:已爲此請求調用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

看起來restlet框架在Request對象上調用了getRequestEntityStream(),後者又調用getInputStream(),因此在請求上調用getReader()將引發IllegalStateException。

的getReader()和的getInputStream()Servlet API的文檔說:

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 

從文檔似乎我不能Request對象(即使它在通話雙方getReader()和的getInputStream()是不是我這樣做)。我不得不使用getInputStream()而不是getReader()。

0

是違法的同時寫入servletRequest.getReader()servletRequest.getInputStream()。我認爲servletRequest.getInputStream()之前也被調用,導致IllegalStateException

+0

ummm它怎麼叫?我沒有調用getInputStream(),getReader()是我的第一行。 – Garvice 2012-04-03 06:46:47

+0

你能檢查你的任何過濾器是否正在呼叫。如果要調試實現RequestWrapper並在getInputStream()中添加調試。 – 2012-04-03 06:56:46

相關問題