3

我从外部系统向我提供了一些 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为 type Object,我可以看到 Jackson 正在将原始数据映射到LinkedHashMap... 一个条目,{BR=null}

如何强制杰克逊将原始值序列化为String?我试过了@JacksonXmlText,结果lookupInfonull.

4

2 回答 2

0

你可以试试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"
}
于 2020-01-28T05:05:46.983 回答
0

问题是您的 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>
于 2016-04-15T14:11:09.193 回答