Java Jackson XMLMapper序列化映射<;字符串,字符串>;不带转义XML的对象<;及>;字符到&;lgt&;gt;?

Java Jackson XMLMapper序列化映射<;字符串,字符串>;不带转义XML的对象<;及>;字符到&;lgt&;gt;?,java,xml,string,serialization,jackson,Java,Xml,String,Serialization,Jackson,我有一个Map key/value:string/string,其中包含一个XML元素名作为key,一个大型XML嵌套字符串作为value,例如: Map<String, String> obj; INSPIRE => <oi-cov:OrthoimageCoverageMetadata xmlns:oi-cov="http://inspire.ec.europa.eu/schemas/oi/4.0" xmlns:gmd="http://www.isotc211.org

我有一个Map key/value:string/string,其中包含一个XML元素名作为key,一个大型XML嵌套字符串作为value,例如:

Map<String, String> obj;

INSPIRE => <oi-cov:OrthoimageCoverageMetadata xmlns:oi-cov="http://inspire.ec.europa.eu/schemas/oi/4.0" xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:base="http://inspire.ec.europa.eu/schemas/base/3.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://inspire.ec.europa.eu/schemas/oi/4.0 https://schema.datacove.eu/OrthoimageryMetadata.xsd"> <oi-cov:inspireId> ...
作为字符串的当前输出为:

<INSPIRE>&lt;oi-cov:OrthoimageCoverageMetadata xmlns:oi-cov="http://inspire.ec.europa.eu/schemas/oi/4.0" xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:base="http://inspire.ec.europa.eu/schemas/base/3.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://inspire.ec.europa.eu/schemas/oi/4.0 https://schema.datacove.eu/OrthoimageryMetadata.xsd"&gt;
&lt;oi-cov:inspireId&gt;
    &lt;base:Identifier&gt;
oi cov:OrthoImageCoverage元数据xmlns:oi cov=”http://inspire.ec.europa.eu/schemas/oi/4.0“xmlns:gmd=”http://www.isotc211.org/2005/gmd“xmlns:gml=”http://www.opengis.net/gml/3.2“xmlns:base=”http://inspire.ec.europa.eu/schemas/base/3.3“xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“xmlns:gco=”http://www.isotc211.org/2005/gco"xmlns:xlink=”http://www.w3.org/1999/xlink“xsi:schemaLocation=”http://inspire.ec.europa.eu/schemas/oi/4.0 https://schema.datacove.eu/OrthoimageryMetadata.xsd"
oi cov:inspireId
基:标识符

您正在序列化为XML,即使您只获得字符串表示,因此对特殊字符进行转义非常有意义,否则生成的标记很可能会被破坏。您是否考虑过去掉属性值“as string”,而是使用一个表示该值的嵌套POJO,这样它就可以在父POJO中序列化?@Mena问题是这里的XML值几乎是一个带有任意嵌套XML元素的通用XML,因此我无法将其映射为POJO对象。明白了吗。那么,您对它应该如何序列化的期望是什么呢?如果不转义特殊字符,您将得到无效的XML—事实上,您甚至可能无法反序列化回pojo。我的怀疑是,问题的根源在于,也就是说,为什么你最终得到了一个字符串->任意标记的映射,你能逃脱设计陷阱吗?例如,如果这些任意标记值有一些共同的结构,您可以尝试创建反映它的POJO层次结构,并对多态集合使用注释,以便在返回时将它们反序列化为正确的子POJO(假设在计划中)。由于Jackson的
XmlMapper
声称遵循JAXB,那么,这个问题的答案可能会对您有所帮助:您正在序列化为XML,即使您只获得字符串表示,因此对特殊字符进行转义非常有意义,否则生成的标记很可能会被破坏。您是否考虑过去掉属性值“as string”,而是使用一个表示该值的嵌套POJO,这样它就可以在父POJO中序列化?@Mena问题是这里的XML值几乎是一个带有任意嵌套XML元素的通用XML,因此我无法将其映射为POJO对象。明白了吗。那么,您对它应该如何序列化的期望是什么呢?如果不转义特殊字符,您将得到无效的XML—事实上,您甚至可能无法反序列化回pojo。我的怀疑是,问题的根源在于,也就是说,为什么你最终得到了一个字符串->任意标记的映射,你能逃脱设计陷阱吗?例如,如果这些任意标记值有一些共同的结构,您可以尝试创建反映它的POJO层次结构,并对多态集合使用注释,以便在返回时将它们反序列化为正确的子POJO(假设在计划中)。由于Jackson的
XmlMapper
声称遵循JAXB,那么这个问题的答案可能会帮助您:
<INSPIRE>&lt;oi-cov:OrthoimageCoverageMetadata xmlns:oi-cov="http://inspire.ec.europa.eu/schemas/oi/4.0" xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:base="http://inspire.ec.europa.eu/schemas/base/3.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://inspire.ec.europa.eu/schemas/oi/4.0 https://schema.datacove.eu/OrthoimageryMetadata.xsd"&gt;
&lt;oi-cov:inspireId&gt;
    &lt;base:Identifier&gt;