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

原文地址:https://www.cnblogs.com/LiuFqiang/p/14274749.html