[英]Jackson JSON Parser Keeps Returning Initial Value
我的程序使用SQL來構建URL來調用Web服務,該服務將返回以下JSON:
[{
"MmisItemNo": "106552",
"CatalogNo": "UM18840041R",
"ContractOn": "False"
}
]
我正在嘗試做的是去除“ True”或“ False”,並使用該值執行其他邏輯。 這是在SQL構建URL之后的代碼:while(rs1.next()){
String first = (rs1.getString("PROP_VALUE"));
String second = (rs1.getString("VEN_ITEM"));
String url = (first.trim()+second.trim());
URL obj = new URL(url);
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
int responseCode = con.getResponseCode();
System.out.println("\nSending 'GET' request to URL : " +url);
System.out.println("Response Code : " + responseCode);
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);
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
LightswitchResponse[] lightswitchResponses = mapper.readValue((response.toString()), LightswitchResponse[].class);
LightswitchResponse lightswitchResponse = lightswitchResponses[0];
System.out.println(lightswitchResponse.ContractOn);
}
} catch (SQLException q) {
logger.error(q);
System.exit(1);
} catch (Exception e) {
logger.error(e,e);
System.exit(1);
} finally {
}
logger.debug("getlightswitchQuery(): End");
這是我的LightswitchResponse類:
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;
}
}
我的問題是,當我打印我的結果=> ContractOn時,對於每條單行記錄/ json都返回false,無論其是True還是False。
例如:
Response Code : 200
[{"MmisItemNo":"106552","CatalogNo":"UM18840041R","ContractOn":"False"}]
false
Response Code : 200
[{"MmisItemNo":"164065","CatalogNo":"UM005979091RH","ContractOn":"True"}]
false
我原本以為這是我的緩沖區中有待清除的東西,但是在深入研究之后,我認為情況並非如此。 任何想法都可能導致這個反復錯誤的問題,而不管字符串響應如何?
這里的主要麻煩是您正在為JSON使用非標准的Java命名約定。
如下注釋您的LightswitchResponse將起作用:
public static class LightswitchResponse {
String MmisItemNo;
String CatalogNo;
boolean ContractOn;
public String getMmisItemNo() {
return MmisItemNo;
}
@JsonProperty("MmisItemNo")
public void setMmisItemNo(String mmisItemNo) {
MmisItemNo = mmisItemNo;
}
public String getCatalogNo() {
return CatalogNo;
}
@JsonProperty("CatalogNo")
public void setCatalogNo(String catalogNo) {
CatalogNo = catalogNo;
}
public boolean ContractOn() {
return ContractOn;
}
@JsonProperty("ContractOn")
public void setContractOn(boolean contractOn) {
ContractOn = contractOn;
}
}
以下測試通過了OK:
@Test
public void testDeserializeBoolean() throws IOException{
final String test = "[{\"MmisItemNo\": \"106552\",\"CatalogNo\": \"UM18840041R\",\"ContractOn\": \"False\"}," +
"{\"MmisItemNo\": \"106552\",\"CatalogNo\": \"UM18840041R\",\"ContractOn\": \"True\"}]";
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
LightswitchResponse[] resp = objectMapper.readValue(test
,
LightswitchResponse[].class);
Assert.assertEquals(false, resp[0].ContractOn());
Assert.assertEquals(true, resp[1].ContractOn());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.