2013-05-06 55 views
0

我正在使用Jersey和Jackson的de/serialization编写一个宁静的服务。我使用Spring来进行依赖注入,我也使用com.sun.jersey.spi.spring.container.servlet.SpringServlet(不使用mvc)。我在客户端使用RestyGWT。我从我的服务中返回一个对象数组,我的客户抱怨说它不是有效的JSON文档。这里是服务返回:Spring-Jersey-Jackson-JSON:由索引包装的数组元素

{ 
    "0": { 
     "type": "AQUISITION_DT", 
     "value": "2013-2-1", 
     "stats": { 
      "total": 91, 
      "used": 4 
     } 
    }, 
    "1": { 
     "type": "AQUISITION_DT", 
     "value": "2013-1-1", 
     "stats": { 
      "total": 24, 
      "used": 13 
     } 
    } 
} 

我不知道,但我认为问题是,每个元素是由其索引包装。有没有办法指导泽西或杰克逊解开阵列元素?请让我知道是否需要提供更多信息。

在代码中,我将结果发送回为一个JSONWithPadding对象,像这样:return new JSONWithPadding(array, callback);

顺便说一句,我已经在我的web.xml配置球衣使用POJO映射:

<init-param> 
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
    <param-value>true</param-value> 
</init-param> 

更新 我做了一个测试与卷曲从终端和返回的字符串看起来是正确的(我已经删除了回调机箱):

{ 
    { 
     "type": "AQUISITION_DT", 
     "value": "2013-2-1", 
     "stats": { 
      "total": 91, 
      "used": 4 
     } 
    }, 
    { 
     "type": "AQUISITION_DT", 
     "value": "2013-1-1", 
     "stats": { 
      "total": 24, 
      "used": 13 
     } 
    } 
} 

我最初发布的字符串是由restyGWT报告的。抱歉的混乱的帖子,我不知道为什么restyGwt抱怨...

谢谢!

+0

你如何在代码中返回JSON? – Willy 2013-05-06 02:27:25

+0

1)正如下面Willy所说,你应该有方括号2)如果你希望我们帮你,你应该粘贴你的客户端代码。在你的restService接口中获取你的数组回调中的类型是什么? – 2013-05-23 14:37:59

回答

0

我能解决这个问题的唯一方法是w把结果说成是对象。最初我正在返回一个数组(MyObject[])。现在我回到MyObjectListing:

public class MyObjectListing { 
    MyObject[] objects; 
    ... 
    //getters/setters, etc. 
} 

返回MyObjectListing解决了这个问题。我不明白为什么。

0

如果你想返回对象的数组,JSON格式应该像下面

[ 
    { 
     "type":"AQUISITION_DT", 
     "value":"2013-2-1", 
     "stats":{ 
     "total":91, 
     "used":4 
     } 
    }, 
    { 
     "type":"AQUISITION_DT", 
     "value":"2013-1-1", 
     "stats":{ 
     "total":24, 
     "used":13 
     } 
    } 
] 

您可以轻松地在你的资源方法返回一个数组像下面

@Path("/test") 
@GET   
@Produces(MediaType.APPLICATION_JSON) 
public Test[] haha(){ 
    Test[] arr = new Test[3]; 
    arr[0] = new Test(); 
    arr[1] = new Test(); 
    arr[2] = new Test(); 
    return arr; 
} 

其中,Test类就像下面

public class Test { 
    public String type="AQUISITION_DT"; 
    public String value = "2013-2-1"; 
    public Stats stats = new Stats(); 
} 

public class Stats { 
    public int total = 10; 
    public int used = 13; 
}