1. 程式人生 > >2.app呼叫PC端介面步驟及原理

2.app呼叫PC端介面步驟及原理

一、準備工作:

  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;          }