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

3

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

因此,它将JSON表示为

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

我正在使用支持Jettison的Apache CXF进行JSON处理。

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


JAXB也被用于JSON。请看这里http://blogs.sun.com/arungupta/entry/totd_8_generating_json_using和这里http://jettison.codehaus.org/。 - Hardy
我正在使用支持Jettison的Apache CXF来处理JSON。 - Hardy
需要更多的信息 - 你想要操作哪种类型的Java对象?即使不知道这一点,用户通常在尝试过Jackson(“纯”JSON)方法后很快就会放弃使用jettison,而且我认为CXF也支持Jackson(Jersey和RESTeasy肯定支持)。 - StaxMan
一个只包含列表的Java Bean。我正在研究使用Jackson和CXF。 - Hardy
显示剩余2条评论
2个回答

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;
}

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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接