Использование jaxb для представления списка в качестве корневого элемента - PullRequest
3 голосов
/ 19 января 2011

Как мы можем маршалировать / отменять маршализацию корневого элемента в JSON, который содержит список с использованием JAXB?

Так что будет JSON как

{
    "tag" : [
        {
            "id" : "a",
            "id2": "aa" 
        },
        {
            "id" : "b",
            "id2" : "bb" 
        },
        {
            "id" : "c",
            "id2" : "cc" 
        } 
    ] 
}

Я использую Apache CXF, который поддерживает JSON через Jettison.

Класс Java может выглядеть так, как показано ниже. Можно использовать аннотацию XmlList для списка и XmlValue для наличия этого списка в корневом элементе. Проблема в том, что XmlValue не будет принимать пользовательский тип.

@XmlRootElement(name = "tag")
public class test
{
    @XmlList
    @XmlValue
    private List<UserDefinedType> testList;
}

Есть ли способ обойти это. Мне нужно, чтобы это работало для отмены маршалинга входящего JSON. Получил эту идею отсюда http://bdoughan.blogspot.com/2010/09/jaxb-collection-properties.html

Ответы [ 2 ]

2 голосов
/ 14 декабря 2011

Это должно работать для формата JSON, который вы упомянули.Однако это может не сработать, если вы хотите выполнить маршалинг / демаршаллинг в определенный формат XML.

@XmlRootElement
public class Test {
    @XmlElement(name = "tag")
    private List<UserDefinedType> testList;
}

public class UserDefinedType {
    @XmlElement(name = "id")
    private String someId;

    @XmlElement(name = "id2")
    private String someId2;
}
0 голосов
/ 08 мая 2019

Это сработало для меня.Имена XmlRootElement и списка совпадают.

@XmlRootElement(name = "tag")
@XmlAccessorType(XmlAccessType.FIELD)
public class Test {
    @XmlElement(name = "tag")
    public List<UserDefinedType> testList;
}

@XmlAccessorType(XmlAccessType.FIELD)
public class UserDefinedType {
    @XmlElement(name = "id")
    public String someId;

    @XmlElement(name = "id2")
    public String someId2;
}
...