JAXB marshall List <string> JSON?

时间:2017-08-02 06:10:53

标签: java xml jaxb moxy

我正在使用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属性:

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

在list元素上添加@XmlList注释,还会添加其键名(cars),如:

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

这是不可取的。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我认为这个marshaller设置应该可以解决你的问题:

marshaller.setProperty(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);