0

我有一个 REST api GET 调用,它采用 JSON 格式的字符串数组。我想使用 Jersey 将该字符串数组转换为字符串数组或列表之类的东西。我已经查看了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
}

这是在请求中发送数据的正确方法。
但是如果你想有一个 QueryParam 作为 JSON 数据,你可以这样做

假设您的请求参数如下所示: String people = "{\"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\",\"名称\":\"离子\"}]}";

您注意到它是一个名为“person”的 JSONObject,其中包含一个 JSONArray,其中包含其他类型为 Person 的 JSONObjets,名称为电子邮件:P 您可以像这样遍历它们:

    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 回答