RestTemplateUtil 將請求轉化成map對象返回

/**
 * RestTemplate模板獲取數據
 * author:lin
 */
public class RestTemplateUtil {
    /** 方法一
     * POST請求 去獲取資源
     * @param url  跨域的url
     * @param map  
         跨域要發送的參數 MultiValueMap<String,Object> map = new LinkedMultiValueMap<String, Object>();
     * @return  返回map對象
     */
    public static Map postUrlToMap(String url,MultiValueMap<String,Object> map){
        try {
            String respon = new RestTemplate().postForObject(url,map,String.class);
            //轉成Map對象
            Map resultMap = JsonToMapUtil.jsonstrToMap(respon);
            return resultMap;
        } catch (Exception x) {
            x.printStackTrace();
        }
        return null;
    }


    /**方法二
     * POST請求 去獲取資源
     * @param url  跨域的url
     * @param map  
     *    相對於方法一。1.增加了請求頭的編碼。2.以表單方式提交,報錯率低。
     * @return  返回map對象
     */
    public static Map postUrlBodyToMap(String url,Map<String, Object> map){
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
        HttpEntity<Map<String, Object>> objectHttpEntity = new HttpEntity<>(map,httpHeaders);
        String responseResultResponseEntity = new RestTemplate().postForObject(url, objectHttpEntity, String.class);
        Map resultMap = JsonToMapUtil.jsonstrToMap(responseResultResponseEntity);
        return resultMap;
    }


/**方法三
* POST請求 去獲取資源
* @param url 跨域的url
* @param map
  * 相對於方法二。1.增加了響應的編碼,一般響應編碼可以爲UFT-8。2.增加響應時間限制一分鐘
* @return 返回map對象
*/
public static Map postUrlBodyToMap(String url,Map<String, Object> map,String charset){
    HttpHeaders httpHeaders = new HttpHeaders();
    httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
    HttpEntity<Map<String, Object>> objectHttpEntity = new HttpEntity<>(map,httpHeaders);
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
	//60s
        requestFactory.setConnectTimeout(60*1000);
        requestFactory.setReadTimeout(60*1000);
    RestTemplate restTemplate = new  RestTemplate(requestFactory);
    restTemplate.getMessageConverters().add(0,new StringHttpMessageConverter(Charset.forName(charset)));
    String responseResultResponseEntity = restTemplate.postForObject(url, objectHttpEntity, String.class);
    Map resultMap = JsonToMapUtil.jsonstrToMap(responseResultResponseEntity);
    return resultMap;
}

 






    /**
     * GET請求 去獲取資源
     * @param url  跨域的url
     * @param map    跨域要發送的參數 Map<String,Object> map = new HashMap<String, Object>(); 不支持傳實體對象
     * @return  返回map對象
     */
    public static Map getUrlMap(String url,Map<String,Object> map){
        try {
            if(map != null){
                StringBuffer sb = new StringBuffer();
                for(Map.Entry<String,Object> entry:map.entrySet()){
                    sb.append(entry.getKey() + "=" + entry.getValue());
                    sb.append("&&");
                }
                String s = sb.toString();
                if(s.endsWith("&&")){
                    s = s.substring(0,s.length()-1);
                }
                if(url.contains("?")) url += "&&" + s;
                else url += "?" + s;
            }
            String respon = new RestTemplate().getForObject(url,String.class);
            //轉化結果
            Map result = JsonToMapUtil.jsonstrToMap(respon);
            return result;
        } catch (Exception x) {
            x.printStackTrace();
        }
        return null;
    }


    /**
     * GET請求 去獲取資源
     * @param url  跨域的url
     * @return  返回map對象
     */
    public static Map getUrlMap(String url){
        return getUrlMap(url,null);
    }

    /**
     * 把字符串轉化成對象
     * @param jsonStr
     * @param t
     * @param <T>
     * @return
     */
    public static  <T> List<T> objectToList(String jsonStr, Class<T> t){
        return JSONArray.parseArray(jsonStr, t);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章