MOXy - 强制单个元素数组成为对象

MOXy - Force Single Element Arrays to be Objects

我们有一个 Jersey 1.18 jax-rs 服务,它曾经使用 jersey-json 包来提供 JSON 支持。我们正在尝试迁移以使用 MOXy,但不会破坏我们的 JSON 界面。不幸的是,jersey-json 将单个元素列表编组为对象,将多元素列表编组为数组。 MOXy 默认将所有长度的列表编组为一个数组。我们知道 MOXy 编组的方式更容易让客户使用,但是我们已经有很多客户在使用我们的界面,它会破坏界面以开始将单个元素列表编组为数组。有没有办法将 MOXy 配置为将单个元素列表编组为对象而不是数组?

jersey-json 整理单元素列表的方式:

"user": {
    "name": "Fred Durst",
    "phone": "555-222-1111"
}

MOXy 整理单元素列表的方式:

"user": [
    {
        "name": "Fred Durst",
        "phone": "555-222-1111"
    }
]

我们要配置 MOXy 以生成以前的单元素列表序列化。那可能吗?我们使用的是 MOXy v2.5.2。

看起来这可以通过设置以下 属性:

MarshallerProperties.JSON_REDUCE_ANY_ARRAYS

true。如果您正在使用 MOXyJsonProvider,则必须子类化并实现 preWriteTo() 才能访问 Marshaller 对象并设置上面的 属性。

EDIT JSON_REDUCE_ANY_ARRAYS 有效。请参阅 this 错误。