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

 

posted @ 2018-10-30 10:49  cbk_jogger  阅读(1742)  评论(0编辑  收藏  举报