【问题标题】:Force JacksonXml to serialize raw value as string强制 JacksonXml 将原始值序列化为字符串
【发布时间】:2016-04-15 13:50:14
【问题描述】:

我从外部系统提供了一些 XML,我需要对其进行解析。其中一个值包含杰克逊遇到问题的一些 HTML(未编码):

Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token

XML 如下所示:

<lookup_info>-- [Snipped] --------------<BR/>
Some more snipped data.<BR/>
<BR/>
And some more snipped data..<BR/>
<BR/>
And even more snipped data...</lookup_info>

我的代码适用于除此之外的所有字段,我的 pojo 代码如下所示:

@JacksonXmlProperty(localName = "customer_name")
private String customerName;

@JacksonXmlProperty(localName = "email")
private String email;

@JacksonXmlProperty(localName = "lookup_info")
private String lookupInfo;

如果我将lookupInfo 更改为Object,我可以看到Jackson 将原始数据映射到LinkedHashMap...只有一个条目,{BR=null}

如何强制 Jackson 将原始值序列化为 String?我试过@JacksonXmlText,结果lookupInfo变成null

【问题讨论】:

  • 您找到解决方案了吗?我面临着一个类似的问题。就我而言,我想将子节点(xml)反序列化为原始 xml...
  • @RomanAgapkin:你找到解决办法了吗?
  • @sbhatt 不,很遗憾没有。使用了完全不同的方法
  • @RomanAgapkin 感谢您的快速回复,我能知道有什么不同的方法吗?是不是 JacksonXML 以外的其他方法?
  • @sbhatt 我不认为,不同的方法适合你 :-) 它更像是一种解决方法。我在反序列化中忽略了该字段并在之后“手动”初始化它

标签: java json xml fasterxml jackson-dataformat-xml


【解决方案1】:

问题是您的 xml 无效。如果您希望将 html 内容嵌入到 xml 元素中,那么您需要正确编码该内容。如果您正在生成内容,那么任何合理的 xml 生成器都应该为您处理该编码。

你的 xml 应该是这样的:

<lookup_info>-- [Snipped] --------------&lt;BR/&gt;
Some more snipped data.&lt;BR/&gt;
&lt;BR/&gt;
And some more snipped data..&lt;BR/&gt;
&lt;BR/&gt;
And even more snipped data...</lookup_info>

【讨论】:

    【解决方案2】:

    您可以尝试underscore-java 库。它有一个静态方法U.fromXmlMap(xml)。我是项目的维护者。

    输出图:

    {
      "lookup_info": {
        "#text": "-- [Snipped] --------------",
        "BR": [
          {
            "-self-closing": "true"
          },
          {
            "#item": {
              "#text1": "\nSome more snipped data."
            }
          },
          {
            "-self-closing": "true"
          },
          {
            "-self-closing": "true"
          },
          {
            "#item": {
              "#text2": "\nAnd some more snipped data.."
            }
          },
          {
            "-self-closing": "true"
          },
          {
            "-self-closing": "true"
          }
        ],
        "#text3": "\nAnd even more snipped data..."
      },
      "#omit-xml-declaration": "yes"
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-24
      相关资源
      最近更新 更多