我正在尝试实现 global magnet API在 Android 应用程序中。我做了一个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
}
}
我现在正在尝试将此字符串反序列化为一个对象。我开设了以下类(class):
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?)
我做错了什么?
最佳答案
我使用修改后的 JSON 字符串测试了您的代码,并将 toString()
添加到您的 POJO,一切正常,如下所示,因此您可能必须提供更多信息以进行调试,例如如何反序列化它以及您使用的 Jackson
库版本。
修改后的 JSON 字符串
{
"declination": {
"units": "Deg",
"value": -4.8235602378845215
},
"inclination": {
"units": "Deg",
"value": -30.085556030273438
},
"total_intensity": {
"units": "nT",
"value": 31945.123046875
}
}
代码片段
ObjectMapper mapper = new ObjectMapper();
MagneticData magneticData = mapper.readValue(jsonStr, MagneticData.class);
System.out.println(magneticData.toString());
控制台输出
MagneticData [declination=MagneticDataElement [units=Deg, value=-4.8235602378845215], inclination=MagneticDataElement [units=Deg, value=-30.085556030273438], total_intensity=MagneticDataElement [units=nT, value=31945.123046875]]
关于java - JsonMappingException : Can not construct instance of. .. android studio中的rest API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59144763/