REST服务在传递JSON数组时抛出异常。我的错是什么?

时间:2015-01-31 05:13:53

标签: java json rest client ibm-rad

我得打电话给第三方所拥有的宁静服务。他们期望一个特定的条目作为数组。我在这里检查了一些问题并编写了代码来创建只有1个元素的数组。即便如此,该服务仍抱怨同样的问题。如果我没有传递该数组,它会正确响应。但不是预期的反应。说它推荐给我一些东西。我希望得到批准。如果我没有通过数组,我会回来调查。如果我通过数组我将回到异常,因为我期待“批准”

{
"orgCode": "XXX",
"modelCode": "XXX",
"event": {
"contacts": [
    {
        "name": "XXX",
        "@id": "941689716",
        "company": "XXX"
    }
    ],.............................

因此。我尝试了两种方法,两者都抛出相同的异常

方法1:创建JSON数组并直接填充

   JSONObject info = new JSONObject();
    info.put("@id", "941689716");
    info.put("name", "XXX");
    info.put("company", "XX");
    JSONArray contactsArray = new JSONArray();
    contactsArray.add(info);
    event.put("contacts", contactsArray.toString());

方法2:创建arraylist,将其添加到JSON Array

   JSONObject info = new JSONObject();
    info.put("@id", "941689716");
    info.put("name", "XXX");
    info.put("company", "XX");
    List<JSONObject> objects = new ArrayList<JSONObject>();
    objects.add(info);
    JSONArray contactsArray = new JSONArray();
    contactsArray.addAll(objects);
    event.put("contacts", contactsArray.toString());

我尝试方法2的原因是因为,在例外情况下我看到他们期待arraylist

Can not deserialize instance of java.util.ArrayList out of START_OBJECT token\n at [Source: java.io.ByteArrayInputStream@52d91fcc; line: 1, column: 50] (through reference chain: com.xx.xx.xx.xx[\"event\"]->com.xx.xx.xx.Event[\"contacts\"])"})

我在IBM RAD上使用java 6,而JSON对象来自com.ibm.json.java包。由于法规

,我无法使用任何开源代码

所以这是我的问题

如果我错了,请纠正我

或者

这可能是服务器方面的问题吗?我在另一个线程中读到,如果arraylist只有1个元素,他们必须处理它,否则它可能会抛出这个错误。

1 个答案:

答案 0 :(得分:0)

我要感谢Sotirios-delimanolis。他的评论让我在数组末尾删除.toString(),同时在根JSON对象中设置它,嘿!!!!!那是有效的,我得到了批准的回复。