java后台调用API,后台解析json

在京的大部分公司都是前后端分离,我是后台java开发人员,一般都是我们写好api,给前台,调用是他们的事儿,因为要接入第三方的api,这里做一下笔记

首先要先拿到第三方api的接口文档,一般大部分都是http请求,先根据appKey和appSecret请求回token,再去调用其他接口

废话不多说,直接上操作和截图

我这里调用的萤石接口

java后台调用API,后台解析json_第1张图片

文档说的很清晰,我在每次调接口前都是先用postman测试一下是否行得通,在去写代码

java后台调用API,后台解析json_第2张图片
接下来写java代码

java后台调用API,后台解析json_第3张图片

核心代码就是这一段:

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 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
	 */
	@ApiOperation(value = "获取用户下直播视频列表")
	@PostMapping(value = "/video", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
	public Page 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 page = new Page<>();
		List 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来搞,很方便。引入的包是阿里的。

---------------------------------------------2020年3月24日 09:38:45-----------------------------------------------

List cmsTeacherVo = JSONArray.parseObject(JSONArray.toJSONString(result.getData()), List.class);


List edurpProduct =JSONArray.parseArray(JSONObject.parseObject(str).getJSONArray("data").toJSONString(),EdurpProduct.class);

 

 

注:博文只是个人笔记仅供参考,如有雷同纯属巧合,如有冒犯请联系博主进行删除

 

你可能感兴趣的:(代码常用知识)