一、restTemplate
restTemplate是spring提供用於訪問Rest的客戶端,restTemplate提供了多種訪問HTTP服務的方法,相比之前經常使用的Apache的HttpClient訪問接口,RestTemplate更加簡潔和高效。
二、GET請求
get請求一般為url帶參,沒有請求體
其中,RestTemplate提供了三種請求http的方式:
exchange
getForObject
getForEntity
首先第一種,可以添加請求頭Headers,設置請求參數,簡易寫法如下
代碼如下:
@Service public class RestTemplateService { private static Logger logger = LoggerFactory.getLogger(RestTemplateService.class); @Autowired private RestTemplate restTemplate; public Map<String, Object> testGetRest(){ Map<String, Object> result = new HashMap<>(); String getUrl = "http://xxx.com/api?key1={value2}&key2={value2}"; String assessToken = "......"; MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); params.add("key1", "value1"); params.add("key2", "value2"); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.add(HttpHeaders.AUTHORIZATION, "Barer " + assessToken); HttpEntity<String> httpEntity = new HttpEntity(null, httpHeaders); ParameterizedTypeReference<Map<String, Object>> responseType = new ParameterizedTypeReference() { }; try{ ResponseEntity<Map<String, Object>> responseEntity = restTemplate.exchange(getUrl, HttpMethod.GET, httpEntity, responseType, params); if (HttpStatus.OK == responseEntity.getStatusCode()){ result = responseEntity.getBody(); } }catch (Exception e){ logger.error("請求接口出錯:", e); } return result; } }
這里注意避免入坑,如果url寫法為 http://xxx.com/api,在執行請求時直接將參數對象params帶入,結果會報錯,無法轉換,
應該在url后面手動添加?key1={value2}&key2={value2},其中key值與params的鍵值一一對應
這種方法是get請求時攜帶的參數較少的情況,如果請求的參數過多或者請求參數個數不確定,有時傳入一些不必選的參數時拼接起來有局限性,並且容易出錯,這時候可以自己手動將參數拼接至url后面