使用Jersey将传入的JSON转换为Java数组

时间:2012-09-19 18:11:32

标签: java json jersey

我有一个REST api GET调用,它接受一个格式化为JSON的字符串数组。我想使用Jersey将该字符串数组转换为字符串数组或List。我已经回顾了http://jersey.java.net/nonav/documentation/latest/json.html,但看起来Jersey希望我创建一个指定它应该如何映射的对象,我真的不想这样做,因为它只是一个简单的数组。

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

        }

我知道有很多这样的库 - 但我更喜欢使用Jersey而不引入任何新库。

2 个答案:

答案 0 :(得分:2)

为您的数据创建一个包装器对象(在本例中为Person类)并使用@XMLRootElement对其进行批注

你的帖子方法应该是这样的

@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 persons =“{\”person \“:[{\”email \“:\”asdasd@gmail.com \“,\”name \“:\”asdasd \“},{\”email \“:\ “Dan@gmail.com \”,\ “名称\”:\ “丹\”},{\ “电子邮件\”:\ “Ion@gmail.com \”,\ “名称\”:\ “dsadsa \” },{\ “电子邮件\”:\ “Dan@gmail.com \”,\ “名称\”:\ “ertert \”},{\ “电子邮件\”:\ “Ion@gmail.com \”,\ “名称\”:\ “离子\”}]}“;

你注意到它是一个名为“person”的JSONObject,它包含一个类型为Person的其他JSONObjets的JSONArray,其名称为email: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

答案 1 :(得分:1)

尝试将数组添加到响应中,例如

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

看看会发生什么。 如果它只是一个非常简单的数组,那么它应该没有任何问题进行解析。

修改

如果你想接收它,那么只接受一个数组而不是一个字符串。尝试使用List或类似的东西。

否则,您可以尝试使用ObjectMapper

解析它
mapper.readValue(string, List.class);