1

リクエストとともに送信されたjsonデータを解析する必要があるJersey Webサービスがあります。

@POST
@Path ("/authenticate")
@Produces (MediaType.APPLICATION_JSON)
public Response authenticate (@Context HttpServletRequest request)
{

    try {
        StringBuffer json = new StringBuffer ();
        BufferedReader reader = request.getReader();
        int line;
        while ((line = reader.readLine()) != null)
        {
            json.append(line);
        }
            System.out.prinln (json);
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    return Response.ok().entity(json).build();
}//end authenticate method

このサービスは、次の例外を生成します。

java.lang.IllegalStateException: getInputStream() has already been called for this request

getReader同じリクエストで aとgetInputStreamを呼び出すことができないことを示唆する調査を行いました。したがって、getInputStreamインスタンスが既に呼び出されているように見えました。明示的な呼び出しを行っていない場合、これはどのように可能ですか? この問題を解決するために、getInputStream代わりにメソッドを使用しました

    try {
        ServletInputStream reader = request.getInputStream();
        int line;
        while ((line = reader.read()) != -1)
        {

        }

    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    return Response.ok().entity().build();

このアプローチでは、バイトの int を使用して json を取得するにはどうすればよいですか?

4

2 に答える 2