spring boot如何访问第三方请求/接口

RestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版,例如 GET 请求、POST 请求、PUT 请求、DELETE 请求以及一些通用的请求执行方法 exchange 以及 execute。

1、restTemplate发送GET请求带header(不带Query参数的请求)

HttpHeaders headers = new HttpHeaders();
headers.set("Authorization","Bearer "+token);
RestTemplate restTemplate = new RestTemplate();
HttpEntity<String> strEntity = new HttpEntity<String>(null,headers);
String url = "";
String forObject = restTemplate.getForObject(url , String.class, strEntity);
return JSONObject.parseObject(forObject);


2、restTemplate发送GET请求带header(带Query参数的请求)

        HttpHeaders headers = new HttpHeaders();
        headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);
        RestTemplate restTemplate = new RestTemplate();
        String url = "";

        UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url)
        .queryParam("msisdn", msisdn)
        .queryParam("email", email)
        .queryParam("clientVersion", clientVersion)
        .queryParam("clientType", clientType)
        .queryParam("issuerName", issuerName)
        .queryParam("applicationName", applicationName);
        HttpEntity<?> entity = new HttpEntity<>(headers);

        HttpEntity<String> response = restTemplate.exchange(
                        builder.build().encode().toUri(), 
                        HttpMethod.GET, 
                        entity, 
                        String.class);
        String body = response.getBody();
        JSONObject jsonObject = JSONObject.parseObject(body);


使用Spring的UriComponentsBuilder类。手动连接字符串更干净,它为你处理URL编码。

3、restTemplate发送POST请求

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.valueOf("application/json;UTF-8"));
RestTemplate restTemplate = new RestTemplate();
JSONObject params = new JSONObject();
params.put("ak", "***");
params.put("sk", "***");
HttpEntity<String> strEntity = new HttpEntity<String>(params.toJSONString(), headers);
JSONObject res = restTemplate.postForObject(url, strEntity, JSONObject.class);
String accessToken = res.getString("key");


4、当请求头的ContentType类型为:application/x-www-form-urlencoded 时:

MultiValueMap<String, String> parmas= new LinkedMultiValueMap<String, String>();
RestTemplate restTemplate=new RestTemplate();
parmas.put("client_id", "123123");
parmas.put("client_secret","454656");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<MultiValueMap<String, String>>(parmas, headers);
String url = "";
String post = restTemplate.postForObject(url,httpEntity, String.class);

String idToken = JSONObject.parseObject(post).getString("id_token");

5、如果报错 HttpClientErrorException$NotAcceptable 406
采用 ResponseEntity<String> 可以hold的住绝大部分的返回值。-> 建议一直用String

ResponseEntity<String> response = restTemplate.exchange("https//xxxx.xxxx.xxx/xxx/xx", HttpMethod.POST, entity, String.class);
XMLPOJO xml = xmlParse(response);

写法示例(POST)

RestTemplate restTemplate = new RestTemplate();
HttpHeaders header1 = new HttpHeaders();
header1.setContentType(MediaType.valueOf("application/json;UTF-8"));
header1.set("Access-Token",accessToken);
JSONObject params = new JSONObject();
String[] str = new String[]{uuid};
params.put("alarm_uuids", str);
params.put("alarm_classification", "INTELLIGENT");
HttpEntity<String> strEntity = new HttpEntity<String>(params.toJSONString(), header1);
String url = urlPrefix + "/v1/" + vo.getUserId() + "/alarms/pictures";
String picUrl = null;
try{
    ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, strEntity, String.class);
    String body = exchange.getBody();
    JSONObject res = JSONObject.parseObject(body);
    String isSucess = res.get("failed_num").toString();
    if(isSucess.equals("0")){
        JSONArray alarms = res.getJSONArray("alarms");
        picUrl = alarms.getJSONObject(0).get("url").toString();
    }
}catch (Exception e){
    e.printStackTrace();
}
return picUrl;

写法示例(POST)

RestTemplate restTemplate = new RestTemplate();
HttpHeaders header1 = new HttpHeaders();
header1.setContentType(MediaType.valueOf("application/json;UTF-8"));
JSONObject params = new JSONObject();
params.put("ak", vo.getAk());
params.put("sk", vo.getSk());
HttpEntity<String> strEntity = new HttpEntity<String>(params.toJSONString(), header1);
JSONObject res = null;
String accessToken = null;
try{
    res = restTemplate.postForObject(urlPrefix + "/v1/" + vo.getUserId() + "/enterprises/access-token", strEntity, JSONObject.class);
    accessToken = res.getString("access_token");
    redisTemplate.opsForValue().set(vo.getUserId(),accessToken,6, TimeUnit.DAYS);
}catch (Exception e){
}
return accessToken;

写法示例(GET)

//headers
HttpHeaders headers = new HttpHeaders();
headers.set("Access-Token",accessToken);
//body
MultiValueMap<String, String> requestBody = new LinkedMultiValueMap<>();
//HttpEntity
HttpEntity<MultiValueMap> requestEntity = new HttpEntity<MultiValueMap>(requestBody, headers);
RestTemplate restTemplate = new RestTemplate();
HttpEntity<String> strEntity = new HttpEntity<String>("",headers);
String url = urlPrefix + "/v1/" + vo.getUserId() + "/devices/" + vo.getDeviceId() + "/channels/" + vo.getChannelId();
ResponseEntity<String> responseEntity1 = null;
try{
    responseEntity1  = restTemplate.exchange(url, HttpMethod.GET, requestEntity, String.class);

}catch (Exception e){
}
if(ObjectUtils.isEmpty(responseEntity1)){
    return null;
}else{
    return JSONObject.parseObject(responseEntity1.getBody());
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值