使用 jackson-dataformat-xml 库将属性设置为空 xml 标签
Set attribute to empty xml tag using jackson-dataformat-xml library
我有序列化为 xml 的 HashMap。
当对象为空时
HashMap<String, Object> h1 = new HashMap<>();
h1.put("test", null);
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(h1));
Jackson 生成了类似这些的东西
<HashMap>
<test/>
</HashMap>
所以我需要以某种方式向这个空标签添加属性
<HashMap>
<test attribute = "something"/>
</HashMap>
可能吗?
你可以这样做...
而不是 null
,您需要在它周围使用类似薄包装的东西,这将指示 XmlMapper
打印此属性信息。
这是解决问题的有效测试。
public class TestXml {
class NullWrapper {
@JacksonXmlProperty(isAttribute = true)
private String attribute = "something";
}
@Test
void test() throws JsonProcessingException {
var mapper = new XmlMapper();
var h1 = new HashMap<>();
h1.put("test", new NullWrapper());
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(h1));
}
}
输出是...
<HashMap>
<test attribute="something"/>
</HashMap>
这是否解决了您的问题?在评论里告诉我。
我有序列化为 xml 的 HashMap
HashMap<String, Object> h1 = new HashMap<>();
h1.put("test", null);
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(h1));
Jackson 生成了类似这些的东西
<HashMap>
<test/>
</HashMap>
所以我需要以某种方式向这个空标签添加属性
<HashMap>
<test attribute = "something"/>
</HashMap>
可能吗?
你可以这样做...
而不是 null
,您需要在它周围使用类似薄包装的东西,这将指示 XmlMapper
打印此属性信息。
这是解决问题的有效测试。
public class TestXml {
class NullWrapper {
@JacksonXmlProperty(isAttribute = true)
private String attribute = "something";
}
@Test
void test() throws JsonProcessingException {
var mapper = new XmlMapper();
var h1 = new HashMap<>();
h1.put("test", new NullWrapper());
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(h1));
}
}
输出是...
<HashMap>
<test attribute="something"/>
</HashMap>
这是否解决了您的问题?在评论里告诉我。