RestTemplate請求第三方接口添加Headers token及設置請求體


一、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后面

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM