早上好,
我是java的新手,并试图通过一个项目,但我遇到了问题。我的程序使用SQL构建一个URL来调用Web服务,该服务将返回以下JSON:
[{
"MmisItemNo": "106552",
"CatalogNo": "UM18840041R",
"ContractOn": "False"
}
]
我需要做的是在结尾处去除“False”或“True”值,以根据其结果执行其他逻辑。
我一直收到以下错误:
.WebCall -com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot
deserialize instance of `.LightswitchResponse` out of START_ARRAY token at [Source: (String)"[{"MmisItemNo":"106552","CatalogNo":"UM18840041R","ContractOn":"False"}]"; line: 1, column: 1]
这是我在WebCall.java类中构建URL之后的代码:
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
ObjectMapper mapper = new ObjectMapper();
LightswitchResponse lightswitchResponse = mapper.readValue(response.toString(), LightswitchResponse.class);
System.out.println(lightswitchResponse.ContractOn);
在我的第二课中,代码如下:
public class LightswitchResponse {
String MmisItemNo;
String CatalogNo;
boolean ContractOn;
public String getMmisItemNo() {
return MmisItemNo;
}
public void setMmisItemNo(String mmisItemNo) {
MmisItemNo = mmisItemNo;
}
public String getCatalogNo() {
return CatalogNo;
}
public void setCatalogNo(String catalogNo) {
CatalogNo = catalogNo;
}
public boolean ContractOn() {
return ContractOn;
}
public void setContractOn(boolean contractOn) {
ContractOn = contractOn;
}
}
关于可能出错的任何想法?我觉得它可能与JSON响应上的[]有关,但不是100%肯定。
答案 0 :(得分:1)
你是对的,因为JSON响应的[]。这意味着要返回的JSON对象是一个对象数组。
因此,要让杰克逊正确地映射它,你应该这样做:
LightswitchResponse[] lightswitchResponses =
mapper.readValue(response.toString(), LightswitchResponse[].class);
然后,您可以从中读取第一个元素以获取所需的LightSwitchResponse对象:
LightswitchResponse lightswitchResponse = lightswitchResponses[0];