2012-04-03 28 views
2

getInputStreamがすでに呼び出されていることを示すHttpServletResponseからBuffered Readerを取得しようとすると、不正な状態例外が発生します。 servletRequest.getReader()servletRequest.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()のためのサーブレット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()を呼び出すことはできませんようですそれをしていた私ではなかった)。

代わりにgetReader()ではなくgetInputStream()を使用する必要がありました。

0

: しかしgetReaderコードの最初の行である、と私は...全然

サーバーをのgetInputStreamを呼び出すことではありませんよ。私はservletRequest.getInputStream()も呼ばれていたと思いますが、これはIllegalStateExceptionにつながっています。

+0

ummmどのように呼び出されていますか?私はgetInputStream()を呼び出すのではなく、getReader()は私の最初の行です。 – Garvice

+0

あなたのフィルターが呼び出していることを確認できますか?デバッグする場合は、RequestWrapperを実装し、getInputStream()でデバッグを追加します。 –

関連する問題