java - JAX-B 中的映射序列化会产生不需要的 XML 命名空间和前缀

标签 java xml xml-serialization jaxb jax-rs

问题:

我正在尝试在 JAX-RS 应用程序中使用 JAX-B 对 HashMap 进行简单的序列化,并遇到我想避免的额外输出。 HashMap 的默认序列化包括无用的 XML 命名空间和前缀(对于我的应用程序)。

我得到的 map 输出是:

<params>
  <entry>
    <key xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">keyName</key>
    <value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">123</value>
  </entry>
  ...
</params>

而不是:

<params>
  <entry>
    <key>keyName</key>
    <value>123</value>
  </entry>
  ...
</params>

该类的布局基本上如下:

@XmlRootElement(name="example")
public ExampleClass
{
  private params HashMap<String,Object> = new HashMap<String,Object>();

  public ExampleClass() { }

  @XmlElementWrapper(name="params", required=true)
  public Map getParameters()
  {
    return params;
  }
}

如何简化 XML 输出?

图书馆引用:

  • JAX-RS(Resteasy 2.0,未与此版本结合)
  • JAX-B(包含在 Resteasy 2.0 中)

最佳答案

由于您的 map 不使用泛型,因此序列化程序会写入每个元素值的数据类型。

尝试使用:

public Map<String,String> getParameters()

即使您使用 Map<String,Object>序列化器必须写入值元素的相应类型。

关于java - JAX-B 中的映射序列化会产生不需要的 XML 命名空间和前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6603334/

相关文章:

c# - 文档存储序列化

java - 谷歌地图使用java和jsp在Web应用程序中绘制源和目的地之间的路线

java - 在 WIndows 上的 Java 中,如何检测文件是否具有 'Read Only' 属性

javascript - 如何在 ASP/vbscript 中解析 XML?

php - 需要 php 来编码特殊字符而不是 html 标签,以便包含在 wordpress 扩展的 rss 文件中

python - 在 Python 中使用 Xpath 解析 MediaWiki 生成的内容

android - 如何解决org.simpleframework.xml.core.ValueRequiredException : Unable to satisfy @org. simpleframework.xml.ElementList()

c# - 在不改变原始类的情况下,在序列化过程中排除一些属性

java - 使用多个位置地理围栏

java - 避免 SocketTimeoutException 的最佳方法是什么?