gpt4 book ai didi

java - 使用 Jackson 库将 Java HashMap 转换为 XML

转载 作者:行者123 更新时间:2023-12-04 01:36:28 24 4
gpt4 key购买 nike

我需要一些帮助来使用 Jackson 将 Java Map 转换为 XMl。
但是我越来越难以获得正确的输出。

Jackson library:
'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.9.8'

代码:
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

public class MainApp {

public static void main(String[] args) throws JsonProcessingException {

Map<String, Object> map = new HashMap<String, Object>();
map.put("key1", "value1");
map.put("key2", "value2");

Application app = new Application();
app.setEntry(map);

// xml output format
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true);
System.out.println(xmlMapper.writerWithDefaultPrettyPrinter().writeValueAsString(app));

}

@JacksonXmlRootElement(localName = "headers")
public static class Application {

private Map<String, Object> entry;

public Map<String, Object> getEntry() {
return Collections.unmodifiableMap(entry);
}

public void setEntry(Map<String, Object> entry) {
this.entry = entry;
}
}

}

输出:
<?xml version='1.0' encoding='UTF-8'?>
<headers>
<entry>
<key1>value1</key1>
<key2>value2</key2>
</entry>
</headers>

这是我想要的输出。
<?xml version='1.0' encoding='UTF-8'?>
<headers>
<entry key="key1">value1</entry>
<entry key="key2">value2</entry>
</headers>

请有人可以帮助我吗?

最佳答案

您需要实现自定义序列化程序才能编写 Map这样的入口。示例实现:

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator;

import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

public class XmlApp {
public static void main(String[] args) throws IOException {
Map<String, Object> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");

Application app = new Application();
app.setEntry(map);

// xml output format
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true);
System.out.println(xmlMapper.writerWithDefaultPrettyPrinter().writeValueAsString(app));
}
}

@JacksonXmlRootElement(localName = "headers")
@JsonSerialize(using = ApplicationJsonSerializer.class)
class Application {

private Map<String, Object> entry;

public Map<String, Object> getEntry() {
return Collections.unmodifiableMap(entry);
}

public void setEntry(Map<String, Object> entry) {
this.entry = entry;
}
}

class ApplicationJsonSerializer extends JsonSerializer<Application> {

@Override
public void serialize(Application value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
ToXmlGenerator xmlGen = (ToXmlGenerator) gen;
xmlGen.writeStartObject();
for (Map.Entry<String, Object> entry : value.getEntry().entrySet()) {
xmlGen.writeObjectFieldStart("entry");
writeAttributes(xmlGen, entry.getKey());
xmlGen.writeRaw(entry.getValue().toString());
xmlGen.writeEndObject();
}
xmlGen.writeEndObject();
}

private void writeAttributes(ToXmlGenerator gen, String key) throws IOException {
gen.setNextIsAttribute(true);
gen.writeFieldName("key");
gen.writeString(key);
gen.setNextIsAttribute(false);
}
}

上面的代码打印:
<?xml version='1.0' encoding='UTF-8'?>
<headers>
<entry key="key1">value1</entry>
<entry key="key2">value2</entry>
</headers>

关于java - 使用 Jackson 库将 Java HashMap 转换为 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59356720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com