MOXy — заставить одноэлементные массивы быть объектами

У нас есть служба jax-rs Джерси 1.18, которая раньше использовала пакет 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 для создания прежней сериализации для одноэлементных списков. Это возможно? Мы используем версию 2.5.2 MOXy.


person Samuel    schedule 22.06.2015    source источник


Ответы (1)


Похоже, это возможно, установив следующее свойство:

MarshallerProperties.JSON_REDUCE_ANY_ARRAYS

до true. Если вы используете MOXyJsonProvider, вы должны создать подкласс и реализовать preWriteTo(), чтобы получить доступ к объекту Marshaller и установить указанное выше свойство.

EDIT JSON_REDUCE_ANY_ARRAYS не работает. См. эту ошибку.

person Samuel    schedule 22.06.2015