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

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

1 ответ

Решение

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

MarshallerProperties.JSON_REDUCE_ANY_ARRAYS

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

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

Другие вопросы по тегам