【问题标题】:Jersey JSON marshalling of empty listsJersey JSON 编组空列表
【发布时间】:2011-04-16 22:00:20
【问题描述】:

我们有一个 Java 对象列表,它通过由 Jersey 创建的 JSON 进行编组。

列表称为“行”。当我们有数据时:

{"records":"1","page":"1","total":"1","rows":[{"id":"692334","cell":["ECS","D","201009","","0","ABCD","11","11","","201009"]}]}

当我们没有数据时:

{"page":0,"records":0,"total":0}

即使 List 的大小为 0,我们如何让 Jersey 包含 rows 字段?我们想要的是:

{"page":0,"records":0,"total":0,"rows":[]}

请注意,我们已经使用 JAXB ContextResolver ensure JSON 对于单行是正确的。不确定我们是否可以配置此解析器来解决我们的问题。

【问题讨论】:

    标签: java json list jaxb jersey


    【解决方案1】:

    使用 Jackson JAX-RS 提供程序而不是替代方案(badgerfish/jettison),它不会进行 XML 到 JSON 的转换。缺少数组很可能是由于这种转换。有多种配置方式(jersey 邮件列表应该有几种),最新版本可能会直接通过 Jersey API 公开它。

    【讨论】:

    • 从来没有尝试过这个,但它似乎是最好的选择。
    【解决方案2】:

    也许这可以帮助您: http://jersey.java.net/nonav/documentation/latest/json.html#d4e903

    似乎一些数组问题可以通过使用这样的东西来解决:

    JSONConfiguration.mapped().arrays("yourArrayName").build()
    

    至少它解决了这个问题,当列表只包含一项时,它也被格式化为 JSON 数组。

    【讨论】:

      【解决方案3】:

      我设法解决了 Jersey json 库中的 JSON 数组“错误”。秘密成分是前面提到的 JSONConfiguration 和 ContextResolver 魔术。请参阅我的以下帖子,它有一个完整的代码示例,自定义的 ContextResolver 和 rest Application 类乍一看可能有点模糊。

      How to serialize Java primitives using Jersey REST

      • 用于零或单元素 Java 列表的 json 数组
      • 不带引号字符的原始整数或布尔字段

      【讨论】:

        猜你喜欢
        • 2011-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-26
        • 2013-07-18
        • 1970-01-01
        • 2012-01-03
        • 1970-01-01
        相关资源
        最近更新 更多