zoukankan      html  css  js  c++  java
  • 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后面

  • 相关阅读:
    38. Count and Say(C++)
    35. Search Insert Position(C++)
    29. Divide Two Integers(C++)
    c++读取utf-8格式中英文混合string
    一种局部二值化算法:Sauvola算法
    Ubuntu 1804 本地显示远程服务器文件
    caffe 预训练 或者Fine-Tuning 操作
    caffe/blob.hpp:9:34: fatal error: caffe/proto/caffe.pb.h: 没有那个文件或目录
    转载---LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别
    [leetcode-921-Minimum Add to Make Parentheses Valid]
  • 原文地址:https://www.cnblogs.com/LiuFqiang/p/14274749.html
Copyright © 2011-2022 走看看