java - Jersey:具有 1 个元素的 Json 数组被序列化为对象

标签 java ajax json jersey

我正在使用 Jersey/Java 创建一个 REST 服务器,但我发现了一个奇怪的行为。

我在服务器上有一个方法,它以 Json 形式返回一个对象数组

@GET
@Path("/files")
@Produces(MediaType.APPLICATION_JSON)
public Object getFiles() throws Exception{
    DatabaseManager db = new DatabaseManager();
    FileInfo[] result = db.getFiles();
    return result;
}

代码正确执行并将数据返回给客户端(jQuery ajax 调用)。 问题是如果“结果”数组有一个或多个元素,则返回数据的格式会发生变化。

一个元素的响应:

{"fileInfo":{"fileName":"weather.arff","id":"10"}}

包含两个元素的响应:

{"fileInfo":[{"fileName":"weather.arff","id":"10"},{"fileName":"supermarket.arff","id":"11"}]}

如您所见,在第一种情况下,返回对象的“fileInfo”属性的值是一个对象,而在第二种情况下,该值是一个数组。 我究竟做错了什么?第一种情况不应该返回这样的东西吗:

{"fileInfo":[{"fileName":"weather.arff","id":"10"}]}

即里面只有一个对象的数组?

我知道我可以在客户端检测到这一点,但这似乎是一个非常丑陋的 hack。

感谢您的宝贵时间。

最佳答案

我最终使用了 Jackson,在泽西官方文档 (http://jersey.java.net/nonav/documentation/latest/user-guide.html#json.pojo.approach.section) 中也有描述。

我之前尝试过,但它不起作用,因为我的项目的构建路径中没有 jackson jar(根据文档,我认为它已内置到 jersey 的核心库中)。

我刚刚添加了 jackson-all.jar 文件 (http://wiki.fasterxml.com/JacksonDownload) 并在配置中启用了 POJO 支持

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

瞧!

关于java - Jersey:具有 1 个元素的 Json 数组被序列化为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13575280/

相关文章:

java - 如何使用 HttpPost 将 Json 发送到 Web 服务

Java - 如何迭代 json 对象键和值对?

java - "Multi-level"泛型,带有子类化和接口(interface)

java - java中的模板解析URL

javascript - 如何从 Ajax FormData.append 访问变量?

java - ICEfaces:如何禁用某些表单的发送接收更新机制

javascript - 从另一个 JSON 对象创建 JSON 对象

java - Eclipse 内存分析器说明

java - 实现接口(interface)时获得与父类(super class)相同的接口(interface)

javascript - 自动刷新 Div 内容而不刷新页面(不使用外部脚本)