リクエストとともに送信された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 を取得するにはどうすればよいですか?