当前位置: 首页 > 知识库问答 >
问题:

使用Jackson XML jar将XML数据转换为POJO?

柴泰平
2023-03-14

我正在使用来自另一个web服务的XML数据进行java项目。我是杰克逊框架的新手。创建POJO文件,但在映射时会显示错误,如无法识别的字段列。我不知道如何映射我的反应

XML响应

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<CellSet>
    <Row key="MNg==">
        <Cell column="ZG9ybWFudF9kZXRhaW29u" timestamp="1563189660088">MjAQ==</Cell>
        <Cell column="ZG9yxzOkV5ZXBsdXM=" timestamp="1563189660088">RI0</Cell>
        <Cell column="ZG9ybWFudF9kZWxzOl=" timestamp="1563189660088"/>
        <Cell column="ZG9ybaWxzOlVDSUM=" timestamp="1563189660088">Mg==</Cell>
        <Cell column="ZG9ybWFudF9kZXRhYXRl" timestamp="1563189660088">MMQ==</Cell>
        <Cell column="ZG9ybWxzOlpveWE=" timestamp="1563189660088"/>
        <Cell column="ZzOndhdGNoZXM=" timestamp="1563189660088"/>
    </Row>
</CellSet>

细胞集类

@JacksonXmlRootElement(localName = "CellSet")
public final class CellSet {

public CellSet() {}

@JacksonXmlElementWrapper(localName = "Row")
private Row[] rows;

public Row[] getRows() {
    return rows;
}

}

排课

public final class Row {

public Row() {}

@JacksonXmlElementWrapper(localName = "Cell")
private Cell[] cells;

public Cell[] getCells() {
    return cells;
}

}

细胞类

public final class Cell {

public Cell() {
    // TODO Auto-generated constructor stub
}

@JacksonXmlProperty(localName = "column", isAttribute = true)
private String column;

@JacksonXmlProperty(localName = "timestamp", isAttribute = true)
private String timestamp;

public String getColumn() {
    return column;
}

public String getTimestamp() {
    return timestamp;
}
}

帮我解决这个问题。

共有1个答案

罗宪
2023-03-14

首先,查看xml文档和JavaBean树,我假设一个响应可以在CellSet根元素下有多个Row元素。

因此,基于上述假设,对象模型存在几个问题。第一种是滥用了@jacksonxmlementwrapper。此注释表示XML元素数组由更高层次的元素包装。所以当你写作的时候

@JacksonXmlElementWrapper(localName = "Row")
private Row[] rows;

杰克逊希望得到这样的信息

<Row>  // xml wrapper
  <rows>  // xml array 
  <rows>
  <rows>
</Row>

实际上,你需要告诉jackson行数组是这样展开的

@JacksonXmlElementWrapper(useWrapping = false)
@JacksonXmlProperty(localName = "Row")
private Row[] rows;

细胞阵列也是如此。

另一个问题是Row类没有key属性的目标,并且cell没有cell元素的文本值的目标

@JacksonXmlRootElement(localName = "CellSet")
public class CellSet {

    @JacksonXmlElementWrapper(useWrapping = false)
    @JacksonXmlProperty(localName = "Row")
    public Row[] rows;
}

public class Row {

    @JacksonXmlProperty(localName = "key", isAttribute = true)
    public String key;

    @JacksonXmlElementWrapper(useWrapping = false)
    @JacksonXmlProperty(localName = "Cell")
    public Cell[] cells;
}

public class Cell {

    @JacksonXmlText()
    public String value;

    @JacksonXmlProperty(localName = "column", isAttribute = true)
    public String column;

    @JacksonXmlProperty(localName = "timestamp", isAttribute = true)
    public String timestamp;

}

最后一点:您的类也缺少setter方法(这是反序列化/反编组,对吗?)在上述解决方案中,为了简洁起见,所有变量都公开了

 类似资料:
  • XML输入文件: XML输入文件转换为XML输出文件。将XML输入文件的firstName、middleName和lastName标签合并为XML Ouput文件的name标签,将XML输入文件的address1、address2、city、state和pincode标签合并为XML Ouput文件的address标签。 我几乎转换了代码,但我在这里与empId作斗争。我已经在XSLT文件中手动输

  • 我想将XML转换为JSON(具体地说,是OAI-PMH响应)。我目前正在使用这个节点。JSXML2JS,但问题是JSON非常冗长,有很多嵌套和数组级别,即使只有一个元素作为子元素,并且永远不会超过一个。问题是,不知道XML文件的模式,因此必须保守。 我的问题是,是否有任何其他(最好是JavaScript)代码可以使用XML架构来指导转换过程?因此,如果架构定义了XML的类型和结构,那么JSON就会

  • 问题内容: 我有一个JSON文件,在此JSON文件中使用解析器将其转换为XML格式,然后写回xml文件 我在Groovy中找不到有关如何执行此操作的任何示例 如果我有如下所示的JSON: 然后,应将其转换为如下所示的XML: 我一直在寻找JSON到XML转换代码 问题答案: 如果您使JSON有效(将名称四舍五入,并且在初始块中加一个逗号),则可以执行此操作以将其转换(专门针对此示例) 我不知道将x

  • 问题内容: 我有一组CSV数据要转换为XML。代码看起来不错,但是输出不够完美。它忽略了一些列,因为它们没有值,并且产生了很长的XML数据行,而不是破坏它。 这是我的CSV数据示例: 而我的代码: 当对以上数据执行此代码时,将产生: 我本人以这种形式安排它,但是输出结果很长。产生的输出应为: 问题答案: 我同意Kennet。 我只是添加了 这在元素之间添加了新行,并允许缩进。 更新 首先,我们要介

  • 我是服务提供商(SP),我们有客户(IDP)向我们提供他们的SAML元数据xml文件。然后,我们希望在数据库中输入OneLogin启用SAML SSO所需的参数。 有没有一种简单的方法可以从IDP元数据xml中提取SP OneLogin SAML参数? 我们希望轻松提取的参数包括: idp\U实体\U id idp\u sso\u target\u url idp\U slo\U target\U

  • 我有以下问题。我不是XSLT方面最伟大的专家,我想成功的是将一个XML从赛贝斯转换为以下内容: Sybase的输出: 我希望它的输出标题保持原样,条目部分不同 这是到目前为止我的XSLT(对不起,不太可能) 也许,有人可以帮我实现我想要的。非常感谢你。