Java Jackson XmlMapper将XML转换为POJO、节点文本';s的关键是&引用;

Java Jackson XmlMapper将XML转换为POJO、节点文本';s的关键是&引用;,java,xml,groovy,jackson,pojo,Java,Xml,Groovy,Jackson,Pojo,我试图从服务读取XML数据(我无法更改数据),但JacksonXmlMapper出现问题。如果我有这样的XML: <entry> <title type="text">W411638</title> </entry> 我尝试使用以下代码将其转换为对象: XmlMapper xmlMapper = new XmlMapper() Entry entry = xmlMapper.readValue(xmlData, Entry.class)

我试图从服务读取XML数据(我无法更改数据),但Jackson
XmlMapper
出现问题。如果我有这样的XML:

<entry>
   <title type="text">W411638</title>
</entry>
我尝试使用以下代码将其转换为对象:

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对象。类型很好,我可以通过entry.title.type获得它,它是正确的,我只是不知道如何获得标题值

这对我来说是一个独立的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]'
@Grab('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.0.5')
导入com.fasterxml.jackson.dataformat.xml.XmlMapper
导入com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlText
班级报名{
静态类标题{
公共字符串类型
@JacksonXmlText
公共字符串值
公共字符串toString(){
“$type->$value”
}
}
公开头衔
公共字符串toString(){
“条目[$title]”
}
}
def xml=''
|W411638
|''.stripMargin()
def xmlMapper=new xmlMapper()
条目pojo=xmlMapper.readValue(xml,条目)
println pojo//打印“条目[text->W411638]”

祝你好运,这对你也有用

因此,我能够使用@JSONCreator解决这个问题

xml


CDATA文本
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(""));
    }
}
公共A类
{
私人B,;
私家侦探;
私有字符串cdata;
@JsonCreator
公共属性DEF(地图道具)
{
setB((String)props.get(“b”);
setD((String)props.get(“d”);
setCdata((字符串)props.get(“”);
}
}
<x>
    <a b="c" d="e">CDATA Text</a>
</x>
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(""));
    }
}