java後臺呼叫API,後臺解析json
阿新 • • 發佈:2018-12-21
在京的大部分公司都是前後端分離,我是後臺java開發人員,一般都是我們寫好api,給前臺,呼叫是他們的事兒,因為要接入第三方的api,這裡做一下筆記
首先要先拿到第三方api的介面文件,一般大部分都是http請求,先根據appKey和appSecret請求回token,再去呼叫其他介面
廢話不多說,直接上操作和截圖
我這裡呼叫的螢石介面
文件說的很清晰,我在每次調介面前都是先用postman測試一下是否行得通,在去寫程式碼
接下來寫java程式碼
核心程式碼就是這一段:
public static final ContentType APPLICATION_FORM_URLENCODED = create( "application/x-www-form-urlencoded", Consts.ISO_8859_1); String string = Request.Post(token_url).bodyString("appKey=" + token_appKey + "&appSecret=" + token_appSecret,ContentType.APPLICATION_FORM_URLENCODED).execute().returnContent().asString();
然後將請求回的json串轉為自己想要的東西
import com.alibaba.fastjson.JSONObject; @Value("${yingshi.token.url}") private String token_url; @Value("${yingshi.token.appKey}") private String token_appKey; @Value("${yingshi.token.appSecret}") private String token_appSecret; /** * 獲取訪問token * * @param appKey * @param appSecret * @return YingshiToken */ @ApiOperation(value = "獲取訪問token") @PostMapping(value = "/token", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public ResponseEntity<YingshiToken> token() { YingshiToken token = new YingshiToken(); try { String string = Request.Post(token_url) .bodyString("appKey=" + token_appKey + "&appSecret=" + token_appSecret, ContentType.APPLICATION_FORM_URLENCODED) .execute().returnContent().asString(); JSONObject jsonObject = JSONObject.parseObject(string); String data = jsonObject.getString("data"); String code = jsonObject.getString("code"); String msg = jsonObject.getString("msg"); if (code.equals("200") && StringUtils.isNotBlank(data)) { JSONObject jsonData = JSONObject.parseObject(data); token.setAccessToken(jsonData.getString("accessToken")); token.setExpireTime(Long.valueOf(jsonData.getString("expireTime"))); } token.setCode(code); token.setMsg(msg); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return ResponseEntity.ok(token); }
圖中token_url、token_appKey、token_appSecret可以自己在配置檔案中配置。
-----------------------------------------------------------------------------------------------------------------------------------------------------------
上面的程式碼請求回的是比較簡單的json串
我們還會遇到json裡帶陣列的json串,用下面這段程式碼來處理
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; /** * 獲取使用者下直播視訊列表 * * @param accessToken * @param pageStart * @param pageSize * @return Page<YingshiModel> */ @ApiOperation(value = "獲取使用者下直播視訊列表") @PostMapping(value = "/video", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public Page<YingshiModel> video(@RequestParam(value = "accessToken", required = true) String accessToken, @RequestParam(value = "pageStart", required = false, defaultValue = "1") String pageStart, @RequestParam(value = "pageSize", required = false, defaultValue = "10") String pageSize) { Page<YingshiModel> page = new Page<>(); List<YingshiModel> list = new ArrayList<>(); YingshiModel device = null; try { String string = Request.Post(video_list_url) .bodyString("accessToken=" + accessToken + "&pageStart=" + pageStart + "&pageSize=" + pageSize, ContentType.APPLICATION_FORM_URLENCODED) .execute().returnContent().asString(); JSONObject jsonObject = JSONObject.parseObject(string); String code = jsonObject.getString("code"); if (code.equals("200")) { String data = jsonObject.getString("data"); JSONArray jsonArray = JSONArray.parseArray(data); if (0 < jsonArray.size() && jsonArray != null) { for (int i = 0; i < jsonArray.size(); i++) { device = new YingshiModel(); JSONObject jsonData = jsonArray.getJSONObject(i); System.out.println("--- " + jsonData); device.setDeviceSerial(jsonData.getString("deviceSerial")); device.setChannelNo(jsonData.getInteger("channelNo")); device.setLiveAddress(jsonData.getString("liveAddress")); device.setHdAddress(jsonData.getString("hdAddress")); device.setRtmp(jsonData.getString("rtmp")); device.setRtmpHd(jsonData.getString("rtmpHd")); device.setBeginTime(jsonData.getLong("beginTime")); device.setEndTime(jsonData.getLong("endTime")); device.setStatus(jsonData.getInteger("status")); device.setException(jsonData.getInteger("exception")); list.add(device); } } page.setResults(list); String pages = jsonObject.getString("page"); JSONObject jsonPage = JSONObject.parseObject(pages); page.setCount(jsonPage.getLong("total")); page.setPageNum(jsonPage.getInteger("page")); page.setPageSize(jsonPage.getInteger("size")); } else { String msg = jsonObject.getString("msg"); logger.info("Err! code : " + code + " msg : " + msg + " accessToken : " + accessToken); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return page; }
這段程式碼中data資料裡包含[{"aa","123"},{"aa","456"}]這樣類似的資料,就可以用jsonArray來搞,很方便。引入的包是阿里的。
注:博文只是個人筆記僅供參考,如有雷同純屬巧合,如有冒犯請聯絡博主進行刪除