
attribute由于
ObjectNode对序列化一无所知,因此无法标记给定的属性。您可以对
POJO类执行此 *** 作,并且
com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator仅在
@JacksonXmlProperty(isAttribute= true)给定属性使用批注时才进行处理。我建议为
POJO需要属性的元素创建元素,并使用
Jackson
XML批注或实现
JsonSerializable接口。它可能如下所示:
import com.fasterxml.jackson.core.JsonGenerator;import com.fasterxml.jackson.databind.JsonSerializable;import com.fasterxml.jackson.databind.SerializationFeature;import com.fasterxml.jackson.databind.SerializerProvider;import com.fasterxml.jackson.databind.jsontype.TypeSerializer;import com.fasterxml.jackson.databind.node.ObjectNode;import com.fasterxml.jackson.dataformat.xml.XmlMapper;import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator;import java.io.IOException;import java.util.linkedHashMap;import java.util.Map;public class XmlMapperApp { public static void main(String[] args) throws Exception { Map<String, Object> map = new linkedHashMap<>(); map.put("Puppy", Boolean.TRUE); map.put("Apple", 2); map.put("Jet", "Li"); Examples examples = new Examples(); examples.setOverlyComplicated("yes"); examples.setMap(map); XmlMapper mapper = new XmlMapper(); mapper.enable(SerializationFeature.INDENT_OUTPUT); ObjectNode rootNode = mapper.createObjectNode(); rootNode.putPOJO("Examples", examples); ObjectNode currentNode = rootNode.putObject("Single"); currentNode.put("One", 1); mapper.writevalue(System.out, rootNode); }}class Examples implements JsonSerializable { @Override public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException { ToXmlGenerator toXmlGenerator = (ToXmlGenerator) gen; toXmlGenerator.writeStartObject(); writeAttributes(toXmlGenerator); writeMap(toXmlGenerator); toXmlGenerator.writeEndObject(); } private void writeAttributes(ToXmlGenerator gen) throws IOException { if (overlyComplicated != null) { gen.setNextIsAttribute(true); gen.writeFieldName("overlyComplicated"); gen.writeString(overlyComplicated); gen.setNextIsAttribute(false); } } private void writeMap(ToXmlGenerator toXmlGenerator) throws IOException { for (Map.Entry<String, Object> entry : map.entrySet()) { toXmlGenerator.writeObjectField(entry.getKey(), entry.getValue()); } } @Override public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException { serialize(gen, serializers); } private String overlyComplicated; private Map<String, Object> map; // getters, setters, toString}上面的代码打印:
<ObjectNode> <Examples overlyComplicated="yes"> <Puppy>true</Puppy> <Apple>2</Apple> <Jet>Li</Jet> </Examples> <Single> <One>1</One> </Single></ObjectNode>
如果要使用相同的对象
Example
POJO进行
JSON序列化,则需要在
serialize方法中处理它或创建另一个对象
ObjectNode而不是
Examlples对象。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)