使用jaxb将列表表示为根元素

时间:2011-01-18 21:43:17

标签: java json jaxb cxf jettison

我们如何使用JAXB编组/解组包含列表的JSON中的根元素?

所以它将JSON视为

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

我正在使用通过Jettison支持JSON的Apache CXF。

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 个答案:

答案 0 :(得分:2)

这适用于您提到的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;
}

答案 1 :(得分:0)

这对我有用。 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;
}