一、准備工作:
1.調研PC端的接口:利用(google,firefox)f12開發者模式,抓取pc端請求信息(url,請求參數)
2.本地后台構建相應的實體,以及對接pc端接口的方法;
二、pc端接口信息獲取及處理
1.使用spring的RestTemplate中的postForEntity()方法來對接pc端接口,具體如下:
ResponseEntity<String> responseEntity = template.postForEntity(loginUrl, map, String.class);
參數詳解:loginUrl為pc端請求路徑,map是請求參數,String。class:響應數據的反射類型
String json = responseEntity.getBody();
PcLoginResponse entity = JSONObject.parseObject(json, PcLoginResponse.class);
List<String> list = responseEntity.getHeaders().get("Set-Cookie"); 獲取cookie中session
將獲取到的結果進行處理先獲取響應體的body,里面包含的就是目標json數據,在進行對應的json-->實體轉換
2.使用spring的RestTemplate中的 exchange() 方法來對接pc端接口,具體如下:
// 參數處理,將實體轉為map集合
Map<String, Object> maps = CommonUtils.object2Map(entity);
public static Map<String, Object> object2Map(Object obj) {
Map<String, Object> map = new HashMap<>();
if (obj == null) {
return map;
}
Class clazz = obj.getClass();
Field[] fields = clazz.getDeclaredFields();
try {
for (Field field : fields) {
field.setAccessible(true);
map.put(field.getName(), field.get(obj));
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
HttpEntity<Map<String, Object>> params = new HttpEntity<Map<String, Object>>(maps, requestHeader); //pc端請參數構造
//獲取PC端返回值
RestTemplate template = new RestTemplate();
ResponseEntity<String> response = template.exchange(strUrl, method, params, String.class);
參數詳解:strUrl為pc端請求路徑,method:pc端請求的類型,params是請求參數,String.class:響應數據的反射類型
String json = response.getBody();
三、獲取請求cookie里面的值,jsoup()方法,如下:
//Jsoup 再次請求登錄頁(傳入cookie)
Connection con = Jsoup.connect(urlStr); urlStr:pc端服務器地址
String cookie =utils.listToString(responseEntity.getHeaders().get("Set-Cookie"));
con.header("Cookie", cookie);
Document doc=con.get();
CookieEntity webCookie = new CookieEntity();
//解析返回的網頁,獲取document.cookie
Element element = doc.getElementById("currentUserName");
webCookie.setCurUserID(element.attr("CurUserID")); //其他值獲取方法相同
四、json相關知識
1.json轉實體、集合
T t = JSONObject.parseObject(json, T.class);
ArrayList<T> list = (ArrayList<T>)JSONArry.parseArray(josn, T.class);
2.實體轉json
String json = JSON.toJSONString(T);
3.防止實體轉json時候首字母大小寫改變問題
a.TypeUtils.compatibleWithJavaBean = true;在轉之前進行設置
b.在被轉實體的get方法前加注解:JSONField(name = "字段名"),示例:
@JSONField(name = "WorkId")
public int getWorkId() {
return WorkId;
}
public void setWorkId(int workId) {
WorkId = workId;
}