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, "Bearer " + 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后面