com.fasterxml.jackson.databind.JsonMappingException 没有从字符串值('1')反序列化的字符串参数构造函数/工厂方法
Posted
技术标签:
【中文标题】com.fasterxml.jackson.databind.JsonMappingException 没有从字符串值(\'1\')反序列化的字符串参数构造函数/工厂方法【英文标题】: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')反序列化的字符串参数构造函数/工厂方法
【问题讨论】:
【参考方案1】:XML 中的 Row
数组应该有一个在您的 XML 文本中不存在的包装器(RowSet
除外)。 Tell Jackson 不寻找包装器,例如
@JacksonXmlProperty(localName = "ROW")
@JacksonXmlElementWrapper(useWrapping = false)
private Row[] row;
【讨论】:
以上是关于com.fasterxml.jackson.databind.JsonMappingException 没有从字符串值('1')反序列化的字符串参数构造函数/工厂方法的主要内容,如果未能解决你的问题,请参考以下文章