问题:
我正在尝试在 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/