1. 程式人生 > >java後臺呼叫API,後臺解析json

java後臺呼叫API,後臺解析json

在京的大部分公司都是前後端分離,我是後臺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來搞,很方便。引入的包是阿里的。

注:博文只是個人筆記僅供參考,如有雷同純屬巧合,如有冒犯請聯絡博主進行刪除