Java 空列表的JSON编组

Java 空列表的JSON编组,java,json,list,jaxb,jersey,Java,Json,List,Jaxb,Jersey,我们有一个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} 即使列表的大小为0,我们如何使Jersey包含行字

我们有一个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}
即使列表的大小为0,我们如何使Jersey包含
字段?我们想要的是:

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

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

使用Jackson JAX-RS提供程序,而不是不进行XML到JSON转换的替代方案(badgerfish/Destinson)。此转换很可能导致缺少数组。有多种方法可以配置此功能(jersey邮件列表应该有一些),最新版本可以通过jersey API直接公开此功能。

这可能有助于您:

似乎有些阵列问题可以通过以下方式解决:

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

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

我设法解决了Jersey JSON库中的JSON数组“bug”。秘密成分是前面提到的JSONConfiguration和ContextResolver magic。请参阅我下面的文章,它有一个完整的代码示例,定制的ContextResolver和rest应用程序类在第一眼看上去可能有些模糊逻辑

  • 零元素或单元素Java列表的json数组
  • 不带引号字符的基本整数或布尔字段

从未尝试过这种方法,但它确实似乎是最好的选择。