我正在尝试从服务中读取XML数据(我无法更改数据)并且遇到Jackson XmlMapper
的问题。如果我有这样的XML:
<entry>
<title type="text">W411638</title>
</entry>
它给了我以下地图:
title: ["": "W411638", "type": text]
我正在尝试使用以下代码将其转换为对象:
XmlMapper xmlMapper = new XmlMapper()
Entry entry = xmlMapper.readValue(xmlData, Entry.class)
我的入门课程看起来像这样:
class Entry {
static class Title {
//String __; //-- This is what I can't figure out --
String type;
}
Title title;
}
问题是我无法找到任何方法将标题文本(“W411638”)放入条目对象中。类型拉得很好,我可以通过entry.title.type得到它,它是正确的,我只是不知道如何获得该标题值。
答案 0 :(得分:2)
这对我来说是一个独立的Groovy脚本......
@Grab( 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.0.5' )
import com.fasterxml.jackson.dataformat.xml.XmlMapper
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlText
class Entry {
static class Title {
public String type
@JacksonXmlText
public String value
public String toString() {
"$type -> $value"
}
}
public Title title
public String toString() {
"Entry [$title]"
}
}
def xml = '''<entry>
| <title type="text">W411638</title>
|</entry>'''.stripMargin()
def xmlMapper = new XmlMapper()
Entry pojo = xmlMapper.readValue( xml, Entry )
println pojo // prints 'Entry [text -> W411638]'
手指越过它也适合你!
答案 1 :(得分:2)
我能够使用@JSONCreator来解决这个问题;
XML
<x>
<a b="c" d="e">CDATA Text</a>
</x>
X.java
public class A
{
private B b;
private D d;
private String cdata;
@JsonCreator
public PropertyDef(Map<String,Object> props)
{
setB((String) props.get("b"));
setD((String) props.get("d"));
setCdata((String) props.get(""));
}
}