【问题标题】:com.fasterxml.jackson.databind.JsonMappingException no String-argument constructor/factory method to deserialize from String value ('1')com.fasterxml.jackson.databind.JsonMappingException 没有从字符串值('1')反序列化的字符串参数构造函数/工厂方法
【发布时间】:2019-12-31 21:27:50
【问题描述】:

我正在调用以 XML 格式返回输出的数据库存储过程。

数据库输出

<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 字符串转换为 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);
}

我收到以下异常

com.fasterxml.jackson.databind.JsonMappingException:无法构造 com.org.employee.Row 的实例,没有从字符串值('1')反序列化的字符串参数构造函数/工厂方法

【问题讨论】:

    标签: java jackson


    【解决方案1】:

    XML 中的 Row 数组应该有一个在您的 XML 文本中不存在的包装器(RowSet 除外)。 Tell Jackson 不寻找包装器,例如

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

    【讨论】:

      猜你喜欢
      • 2017-03-03
      • 2018-09-09
      • 1970-01-01
      • 2017-12-23
      • 2021-09-22
      • 1970-01-01
      • 2019-05-15
      • 2017-04-20
      • 2019-06-14
      相关资源
      最近更新 更多