打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
优雅的http请求方式RestTemplate,让人爱不释手
userphoto

2022.08.02 广东

关注

作为一名java服务端开发者,我们一般是提供接口给前端调用,但要是遇到我们也需求请求第三方接口,类似前端那样调用第三方接口,该怎么办?

在使用spring boot时,Apache中HttpClient支持,个人感觉代码比较复杂,使用RestTemplate来发起http请求,代码更加简洁了。

RestTemplate

RestTemplate是Spring用于同步client端的核心类,简化了与http服务的通信,并满足RestFul原则,程序代码可以给它提供URL,并提取结果。默认情况下,RestTemplate默认依赖jdk的HTTP连接工具。当然你也可以 通过setRequestFactory属性切换到不同的HTTP源,比如Apache HttpComponents、Netty和OkHttp。

get请求实践

在RestTemplate中,对GET请求有两种方式

1、getForEntiy函数,返回的是ResponseEntity

1 RestTemplate restTemplate = new RestTemplate();
2 ResponseEntity<String> responseEntity=restTemplate.getForEntity(url+"?name={1}",  String.class"username");
3 String body = responseEntity.getBody();
如果希望返回的body是个TokenBeen对象,可以这样实现:
1RestTemplate restTemplate = new RestTemplate();
2ResponseEntity<TokenBeen> responseEntity =restTemplate.getForEntity(url+"?name={1}",  TokenBeen.class"username");
3if(responseEntity!=null){
4 TokenBeen body = responseEntity.getBody();
5}

getForEntiy函数有三种重载:

  1. getForEntity(String url, Class responseType, Object... urlVariables)
  2. getForEntity(String url, Class responseType, Map urlVariables)
1RestTemplate restTemplate = new RestTemplate();
2Map<StringString> params = new HashMap<>();
3params.put("name""username");
4ResponseEntity<String> responseEntity = restTemplate.getForEntity(url+"?name={name}",  String.class, params);
注意map的key要和参数中占位符相同
  1. getForEntity(URI uri, Class responseType)

1RestTemplate restTemplate = new RestTemplate();
2UriComponents uriConponents = UriComponentsBuilder.fromUriString(url+"?name={name}").build().expand("username").encode();
3URI uri = uriConponents.toUri();
4ResponseEntity<String> responseEntity = restTemplate.getForEntity(uri, String.class);

2、getForObject函数, 可以看作是对getForEntity进一步封装

1RestTemplate restTemplate = new RestTemplate();
2//注意参数中是uri
3String body = restTemplate.getForObject(uri, String.class);
返回TokenBeen对象:
1RestTemplate restTemplate = new RestTemplate();
2TokenBeen body = restTemplate.getForObject(uri, TokenBeen.class);

post请求实践

post请求也有postForObject和postForEntity。
  public <T> T postForObject(String url, @Nullable Object request, Class<T> responseType, Object... uriVariables)
  throws RestClientException {}
  public <T> T postForObject(String url, @Nullable Object request, Class<T> responseType, Map<String, ?> uriVariables)
        throws RestClientException {}
  public <T> T postForObject(URI url, @Nullable Object request, Class<T> responseType) throws RestClientException {}

使用方法和get类似,不妨动手尝试下。怕看得太多,实践得太少。由于水平有限,文中纰漏之处在所难免,权当抛砖引玉。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Spring Boot - 访问外部接口
Spring RestTemplate中几种常见的请求方式
Spring Boot 调用外部接口的 3 种方式,还有谁不会?!
SpringMVC RestTemplate的几种请求调用
从零搭建 Spring Cloud 服务(超级详细)
SpringBoot基础实践开源项目分享(一)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服