我的XML:
<body>
<type>authorizationStatus</type>
<data>
<AuthorizationStatusMessage>
<id>12345679</id>
<email>abc</email>
</AuthorizationStatusMessage>
</data>
</body>
我想将这个XML解组为POJO:
public class XMPPMessage {
private String type;
private String data;
}
Jackson unmarshal给了我一个HashMap:
{AuthorizationStatusMessage={id_colaborador=12345679, email=rhochman@atech.com}}
但是我希望将数据内部XML保持为类似的字符串:
<AuthorizationStatusMessage><id>12345679</id><email>abc</email></AuthorizationStatusMessage>
如何将内部XML保持为String ??
答案 0 :(得分:1)
我可以看到两个选项。
如果您可以修改XML架构,则可能需要利用CDATA
部分(https://en.wikipedia.org/wiki/CDATA)将<data>
内容保持为String
。
您可以实施自定义杰克逊反序列化程序,仅提取type
和data
。网上有很多很好的参考资料(例如http://www.baeldung.com/jackson-deserialization)。
答案 1 :(得分:0)
我得到了它...我找到了一个名为Conversion Box的库来将HashMap转换为XML。
答案 2 :(得分:0)
我创建了自定义反序列化程序,用于将内部XML存储为String(例如Kotlin上的示例)
import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.databind.DeserializationContext
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer
import com.fasterxml.jackson.databind.node.ObjectNode
import com.fasterxml.jackson.dataformat.xml.XmlMapper
object XmlInnerDeserializer : StdScalarDeserializer<String>(String::class.java) {
override fun deserialize(jp: JsonParser?, context: DeserializationContext?): String {
val node = jp!!.codec.readTree<ObjectNode>(jp)
val xmlMapper: ObjectMapper = XmlMapper()
val xml = xmlMapper.writeValueAsString(node)
return xml.toString()
}
}
使用方法:
@JacksonXmlRootElement(localName = "body")
@JsonIgnoreProperties(ignoreUnknown = true)
class XMPPMessage (
@JsonDeserialize(using = XmlInnerDeserializer::class)
@JacksonXmlProperty(localName = "data")
val data: String
}
字段data
包含"<ObjectNode><AuthorizationStatusMessage>... </AuthorizationStatusMessage></ObjectNode>"
字符串。