【发布时间】:2020-03-27 09:51:39
【问题描述】:
我正在尝试在 android 应用程序中实现 global magnet API。我做了一个rest API get请求并将json API数据放在string中(这个字符串叫做dataString。这个字符串看起来像这样:
{
declination: {
units: "Deg",
value: -4.8235602378845215
},
inclination: {
units: "Deg",
value: -30.085556030273438
},
total_intensity: {
units: "nT",
value: 31945.123046875
}
}
我现在正试图将此字符串反序列化为一个对象。我做了以下课程:
public class MagneticData {
@JsonProperty("declination")
public MagneticDataElement declination;
@JsonProperty("grid_variation")
public MagneticDataElement grid_variation;
@JsonProperty("inclination")
public MagneticDataElement inclination;
@JsonProperty("total_intensity")
public MagneticDataElement total_intensity;
}
public class MagneticDataElement {
@JsonProperty("units")
public String units;
@JsonProperty("value")
public double value;
}
我现在使用ObjectMapper.readValue() 函数将dataString 转换为MagneticData 类型的对象,但出现以下错误:
com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.mobcom.apitest.MainActivity$MagneticData: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?)
我做错了什么?
【问题讨论】:
-
您能否展示您的
POJO类,就像您在项目中真正拥有它们一样:包含所有 getter、setter 和构造函数?异常消息非常清楚:missing default constructor or creator, or perhaps need to add/enable type information?表示您没有任何公共非参数构造函数,或任何其他可以轻松映射到JSON的构造函数。 -
您的
dataString不是有效的 JSON 字符串,因为所有键都必须用双引号括起来,如果变量名和键名,您不必在每个字段中添加@JsonPropertyJSON 对象的数量是相同的。
标签: java json android-studio jackson