JAXB marshall List‹String› JSON?

Я использую JAXB (MoXY) для сортировки/десортировки моих данных как в XML, так и в JSON.

У меня есть List<String>, завернутый в класс, который я хочу отправить по сети:

@XmlRootElement(name = "carList")
public class CarsList {

    @XmlValue
    protected List<String> cars;

    public List<String> getCars() {
        if (cars == null) {
            cars = new ArrayList<String>();
        }
        return cars;
    }

    public void addCar(String carId) {
        if (cars == null) {
            cars = new ArrayList<String>();
        }
        if (carId != null) {
            this.cars.add(car);
        }
    }

    public void setCars(List<String> cars) {
        this.cars = cars;
    }
}

XML приходит, как и ожидалось:

<prefix:carList xmlns:prefix="http://www....some prefix namespace...">car1 car2 car3</prefix:carList>

Но JSON, который я получаю, это:

{
   "prefix:carList" :  "car1 car2 car3"
}

Мои свойства маршаллера JSON:

marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");
marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, true);
marshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, false);

Но я хочу, чтобы мой JSON выглядел так:

{
   "prefix:carList" : [ "car1", "car2", "car3" ]
}

Я новичок в JAXB. Какие изменения мне нужны, чтобы сделать мой JSON желаемым? Я готов изменить класс моего домена CarsList

Добавление аннотации @XmlList к элементу списка также добавляет его имя ключа (cars), например:

{
"prefix:carsList" : {
      "cars" : ["car1", "car2", "car3"]
}
}

что нежелательно.

Любая помощь приветствуется.


person Siddharth Trikha    schedule 02.08.2017    source источник


Ответы (1)


Я думаю, что эта настройка Marshaller должна решить вашу проблему:

marshaller.setProperty(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);
person Imperative    schedule 22.08.2017