【问题标题】:Using jaxb to represent a list as the root element使用 jaxb 将列表表示为根元素
【发布时间】:2011-06-11 09:24:31
【问题描述】:

我们如何使用 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

【问题讨论】:

  • 为什么要使用 JAXB 序列化 JSON? JAXB 仅用于 XML 绑定...它不是具有灵活绑定的通用数据建模框架。
  • 虽然一些工具可以将 JAXB 注释的类编组为 JSON(例如 Jackson 和显然是 Jettison),但这是非常不标准的,并且取决于工具。你在使用 Jettison 和 XStream 吗?
  • 我正在使用通过 Jettison 支持 JSON 的 Apache CXF。
  • 需要更多信息——你想操作什么样的Java对象?此外,即使不知道这一点,用户也经常在尝试过 Jackson(“纯”JSON)方法后立即放弃,我认为 CXF 也支持 Jacksons(Jersey 和 RESTeasy 肯定可以)

标签: java json jaxb cxf jettison


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      • 2012-12-21
      • 1970-01-01
      相关资源
      最近更新 更多