在京的大部分公司都是前后端分离,我是后台java开发人员,一般都是我们写好api,给前台,调用是他们的事儿,因为要接入第三方的api,这里做一下笔记
首先要先拿到第三方api的接口文档,一般大部分都是http请求,先根据appKey和appSecret请求回token,再去调用其他接口
废话不多说,直接上操作和截图
我这里调用的萤石接口
文档说的很清晰,我在每次调接口前都是先用postman测试一下是否行得通,在去写代码
核心代码就是这一段:
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);
注:博文只是个人笔记仅供参考,如有雷同纯属巧合,如有冒犯请联系博主进行删除