1. 程式人生 > >關於JSONObject取值方法getString()與optString()

關於JSONObject取值方法getString()與optString()

conf rule str esc body 方法 cat gmv equals

用JSON這麽久,剛發現JSONObject的getString()暗藏炸彈!!!

public Map<String, Object> queryalmMonitorInfo(@RequestBody String jsonStr)
    {
        JSONObject json = JSONObject.fromObject(jsonStr);
        // 當前頁碼
        int currentPage = json.getInt(SysConstant.PAGE);
        // 每頁條數
        int pageSize = json.getInt(SysConstant.ROWS);
        Map
<String, Object> mape = new HashMap<String, Object>(); String areaid = json.getString("areaids"); JSONArray areaids = JSONArray.fromObject(areaid); @SuppressWarnings("unchecked") List<String> areaIdlist = (List<String>) JSONArray.toCollection(areaids, String.
class); String sysAndeqp = json.getString("eqpLists"); List<String> eqpLists; if ("".equals(sysAndeqp)) { eqpLists = null; } else { JSONArray eqpList = JSONArray.fromObject(sysAndeqp); eqpLists = (List<String>) JSONArray.toCollection(eqpList, String.
class); } String sysEmsId = json.getString("sysEmsId"); String techType = json.getString("techType"); List<String> sysEmsIds; if ("".equals(sysEmsId)) { sysEmsIds = null; } else { /* * JSONArray sysEmsIdList = JSONArray.fromObject(sysEmsId); * sysEmsIds = (List<String>) JSONArray.toCollection(sysEmsIdList, * String.class); */ String[] arr = sysEmsId.split(","); sysEmsIds = Arrays.asList(arr); } List<String> techTypes; if ("".equals(techType)) { techTypes = null; } else { /* * JSONArray techTypeList = JSONArray.fromObject(techType); * techTypes = (List<String>) JSONArray.toCollection(techTypeList, * String.class); */ String[] arr1 = techType.split(","); techTypes = Arrays.asList(arr1); } String keyword = json.getString("keyword"); String alarmLevel = json.getString("alarmLevel"); String neEmsId = json.getString("neEmsId"); String shelfEmsId = json.getString("shelfEmsId"); String slotEmsId = json.getString("slotEmsId"); int cardEmsId = json.getInt("cardEmsId"); String isConf = json.getString("isConf"); String portEmsId = json.getString("portEmsId"); PageVo pageVo = PageUtil.assemblePageVo(currentPage, pageSize); mape.put("keyword", keyword); mape.put("alarmLevel", alarmLevel); mape.put("techType", techTypes); mape.put("areaId", areaIdlist); mape.put("sysEmsId", sysEmsIds); mape.put("neEmsId", neEmsId); mape.put("shelfEmsId", shelfEmsId); mape.put("slotEmsId", slotEmsId); mape.put("cardEmsId", cardEmsId); mape.put("portEmsId", portEmsId); mape.put("sysAndeqp", eqpLists); mape.put("isConf", isConf); //新加條件20180628 mape.put("isDamage", json.optString("isDamage")); mape.put("techTypeName", json.optString("techTypeName")); mape.put("sysName", json.optString("sysName")); mape.put("neTypeName", json.optString("neTypeName")); mape.put("alarmLevelOriginal", json.optString("alarmLevelOriginal")); mape.put("alarmNeTimeStar", json.optString("alarmNeTimeStar")); mape.put("alarmNeTimeEnd", json.optString("alarmNeTimeEnd")); mape.put("ruleDesc", json.optString("ruleDesc")); mape.put("projectName", json.optString("projectName")); PageVo resPageVo = almMonitorService.getNetworkScaleAnalysis(pageVo, mape); Map<String, Object> map = new HashMap<String, Object>(); map.put(SysConstant.ROWS, resPageVo.getVoList()); map.put(SysConstant.TOTAL, resPageVo.getRecordCount()); return map; }

項目用的SpringMVC,前端報錯經過調試為此方法沒有返回值,由於這是別人寫的代碼並沒有try catch(這裏表示氣憤!!!),經過一點一點debug發現getString()方法無緣無故拋異常了,問了下度娘發現這個方法有雷:當JSONObject中不存在某key的時候就拋異常,而optString()不會,前端寫的是自定義條件查詢,JSONObject中的key並不是固定不變的,所以這裏改為用optString()方法,mybatis配置的sql中有判斷,不會影響查詢。

關於JSONObject取值方法getString()與optString()