簡體   English   中英

Jackson JSON解析器不斷返回初始值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM