0

以下を含む RESTful Web サービスをセットアップしました。

    @GET
@Path("{from}/{to}")
@Produces({"application/xml", "application/json"})
public List<Story> findRange(@PathParam("from") Integer from, @PathParam("to") Integer to) {
    return super.findRange(new int[]{from, to});
}

データベース内のすべての Story オブジェクトのリストを返します。私もこれを持っています:

    @GET
@Path("{id}")
@Produces({"application/xml", "application/json"})
public Story find(@PathParam("id") Short id) {
    return super.find(id);
}

パスの末尾に「/{id}」を追加すると、単一の Story オブジェクトが返されます。これらは両方ともサーバー上で正常に動作し、期待される結果を返します。クライアント側では、後者の方法は次のコードを使用して完全に機能します。

HttpClient httpclient = new DefaultHttpClient();
        HttpGet httpget = new HttpGet(url);
        httpget.addHeader("accept", "application/json");

        HttpResponse response;
        JSONObject object = new JSONObject();
        String resprint = new String();

        try {
            response = httpclient.execute(httpget);
            // Get the response entity
            HttpEntity entity = response.getEntity();

            if (entity != null) {
                // get entity contents and convert it to string
                InputStream instream = entity.getContent();
                String result= convertStreamToString(instream);
                resprint = result;
                // construct a JSON object with result
                object=new JSONObject(result);
                // Closing the input stream will trigger connection release
                instream.close();
            }
        } 
        catch (ClientProtocolException e) {System.out.println("CPE"); e.printStackTrace();} 
        catch (IOException e) {System.out.println("IOE"); e.printStackTrace();} 
        catch (JSONException e) { System.out.println("JSONe"); e.printStackTrace();}

        System.out.println("FUCKYEAHBG: " + resprint);
        return object;
    }

}

私の問題は、JSON Story オブジェクトのリストを返す必要がある最初のメソッドでこの同じコードを使用しようとすると、JSON 例外が発生することです: Type Mismatch.

単一のオブジェクトではなく、json オブジェクトの配列を受け入れるようにこのコードを変更するにはどうすればよいですか?

4

1 に答える 1

0

私が質問をしている間にそれを理解しました.JSONArrayはJSONObjectとは独立した異なるタイプのオブジェクトであるため、getリクエストの結果は次のように宣言する必要があります:

            HttpClient httpclient = new DefaultHttpClient();
        HttpGet httpget = new HttpGet(url);
        httpget.addHeader("accept", "application/json");

        HttpResponse response;
        JSONArray object = new JSONArray();
        String resprint = new String();

        try {
            response = httpclient.execute(httpget);
            // Get the response entity
            HttpEntity entity = response.getEntity();

            if (entity != null) {
                // get entity contents and convert it to string
                InputStream instream = entity.getContent();
                String result= convertStreamToString(instream);
                resprint = result;
                // construct a JSON object with result
                object=new JSONArray(result);
                // Closing the input stream will trigger connection release
                instream.close();
            }

他の JSON 初心者がこの質問を持っている場合に備えて、質問の投稿を終了すると考えました。

于 2013-02-23T23:15:17.837 に答える