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

作为一名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类似,不妨动手尝试下。怕看得太多,实践得太少。由于水平有限,文中纰漏之处在所难免,权当抛砖引玉。
-END-

往期精选推荐

同事辞职了,我一个人做两个人的活,公司又不招人了,该怎么办?

程序员月薪多少才不会焦虑

《色戒》被禁的三段激情床戏

微信公众号:洪生鹏  头条号:洪生鹏
分享职场干货、软件编程、程序人生和创业资源。
发布了340 篇原创文章 · 获赞 691 · 访问量 72万+

猜你喜欢

转载自blog.csdn.net/X8i0Bev/article/details/103220610