当前位置: 首页 > 知识库问答 >
问题:

com.fasterxml.jackson.databind.Json映射除了没有字符串参数构造函数/工厂方法从字符串值(“1”)反序列化

游勇军
2023-03-14

我正在调用数据库存储过程,该过程将输出作为XML返回。

DB输出

<ROWSET>
 <ROW>
  <EMPLOYEEID>1</EMPLOYEEID>
  <EMPLOYEENAME>SEAN</EMPLOYEENAME>
  <DEPT>ACOUNTING</DEPT>
 </ROW>
 <ROW>
  <EMPLOYEEID>6</EMPLOYEEID>
  <EMPLOYEENAME>KAREN</EMPLOYEENAME>
  <DEPT>HR</DEPT>
 </ROW>
</ROWSET>

我正在使用Jackson将XML String转换为java对象。我创建了一个支持的java类来将XML映射到java对象

@JacksonXmlRootElement(localName = "ROWSET")
public class RowSet {

    @JacksonXmlProperty(localName = "ROW")
    private Row [] row;

    public RowSet() {
    }

    public Row [] getRow() {
        return row;
    }

    public void setRow(Row [] row) {
        this.row = row;
    }
}

class Row {

    @JacksonXmlProperty(localName = "EMPLOYEEID")
    private String employeeId;
    @JacksonXmlProperty(localName = "EMPLOYEENAME")
    private String employeeName;
    @JacksonXmlProperty(localName = "DEPT")
    private String dept;

    public String getEmployeeId() {
        return employeeId;
    }

    public void setEmployeeId(String employeeId) {
        this.employeeId = employeeId;
    }

    public String getEmployeeName() {
        return employeeName;
    }

    public void setEmployeeName(String employeeName) {
        this.employeeName = employeeName;
    }

    public String getDept() {
        return dept;
    }

    public void setDept(String dept) {
        this.dept = dept;
    }
}

从字符串xml创建java对象的代码

public static void main(String ... args){
    String ouputput= getEmployeeData();// DB call to get data as xml string
    XmlMapper xmlMapper = new XmlMapper();
    RowSet rowSet= xmlMapper.readValue(ouputput, RowSet.class);
    System.out.println(rowSet.getRow().length);
}

我得到以下异常

无法构造字符串参数的实例,无法构造字符串参数构造函数/工厂方法从字符串值 (“1”) 反序列化

共有1个答案

后凯捷
2023-03-14

XML 中的数组应该有一个在 XML 文本中不存在的包装器(行集除外)。告诉杰克逊不要寻找包装纸,例如

@JacksonXmlProperty(localName = "ROW")
@JacksonXmlElementWrapper(useWrapping = false)
private Row[] row;
 类似资料: