0

JSON 形式の文字列の配列を受け取る REST API GET 呼び出しがあります。ジャージーを使用して、その文字列の配列を文字列配列やリストなどに変換したいと思います。http://jersey.java.net/nonav/documentation/latest/json.htmlを確認しましたが、ジャージーは、マップ方法を指定するオブジェクトを作成するように求めているようですが、これは本当に望んでいません単純な配列だからです。

        @GET
        public Response get(@QueryParam("json_items") String requestedItems) throws IOException
        {
            //Would like to convert requestedItems to an array of strings or list

        }

このためのライブラリがたくさんあることは知っていますが、Jersey を使用し、新しいライブラリを導入しないことを好みます。

4

2 に答える 2

2

データ(この場合はPersonクラス)のラッパーオブジェクトを作成し、@XMLRootElementで注釈を付けます。post

メソッドは次のようになります。

@POST
@Consumes(MediaType.APPLICATION_JSON)
public void post(List<Person> people) {
    //notice no annotation on the method param
    dao.putAll(people);
    //do what you want with this method
    //also best to return a Response obj and such
}

これは、データがリクエストで送信される場合にこのようなことを行う正しい方法です。
ただし、JSONデータとしてQueryParamが必要な場合は、これを行うことができます

リクエストパラメータは次のようになります。Stringpersons="{\"person \ ":[{\" email \ ":\" asdasd@gmail.com \ "、\" name \ ":\" asdasd \ "}、 {\" email \ ":\" Dan@gmail.com \ "、\" name \ ":\" Dan \ "}、{\" email \ ":\" Ion@gmail.com \ "、\" name \ ":\" dsadsa \ "}、{\" email \ ":\" Dan@gmail.com \ "、\" name \ ":\" ertert \ "}、{\" email \ ":\" Ion @ gmail.com \ "、\" name \ ":\" Ion \ "}]}";

「person」という名前のJSONObjectには、Eメール:Pという名前のPersonタイプの他のJSONObjetのJSONArrayが含まれていることがわかります。次のように、それらを繰り返し処理できます。

    try {
        JSONObject request = new JSONObject(persons);
        JSONArray arr = request.getJSONArray("person");
        for(int i=0;i<arr.length();i++){
            JSONObject o = arr.getJSONObject(i);
            System.out.println(o.getString("name"));
            System.out.println(o.getString("email"));
        }
    } catch (JSONException ex) {
        Logger.getLogger(JSONTest.class.getName()).log(Level.SEVERE, null, ex);
    }

sry

于 2012-09-20T22:26:06.180 に答える
1

次のように、応答に配列を追加してみてください

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

そして何が起こるか見てください。非常に単純な配列であれば、問題なく解析されるはずです。

編集:

それを受け取りたい場合は、文字列ではなく配列を受け入れてください。リストなどで試してみてください。

それ以外の場合は、ObjectMapper を使用して解析を試みることができます

mapper.readValue(string, List.class);
于 2012-09-19T18:19:05.010 に答える