RestTemplate调用接口
程序员文章站
2022-06-26 08:02:31
...
以前在调用http请求的时候,都是使用HttpClientjar包进行工具类的编写,现在使用Spring Boot的话,就连http请求都变的更加的方便。下面是我在使用Spring Boot进行http接口调用的方法分享,如有更好建议请留言,谢谢!
- 依赖模块
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- RestTemplate请求模板配置
package com.yunxi.wx.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
/**
* TODO restTemplate模板配置
*
* @author xiaoshuaishuai
* @date 2019-08-29 17:07
*/
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
return new RestTemplate(factory);
}
@Bean
public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setReadTimeout(5000);
factory.setConnectTimeout(5000);
return factory;
}
}
- 模拟Http的GET请求
package com.yunxi.wx.start;
import com.yunxi.wx.utils.AccessToken;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
/**
* TODO 项目启动后开始执行的方法
*
* @author xiaoshuaishuai
* @date 2019-08-29 13:22
*/
@Component
public class StartTask implements CommandLineRunner {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Resource
private RestTemplate restTemplate;
@Override
public void run(String... args) throws Exception {
logger.info("项目启动成功后执行");
String token = getToken();
logger.info(token);
}
public String getToken() {
final String baseUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type={grant_type}&appid={appid}&secret={secret}";
Map<String, Object> parameters = new HashMap<>(4);
parameters.put("grant_type", "client_credential");
parameters.put("appid", "微信公众号的appid");
parameters.put("secret", "微信公众号的**");
return restTemplate.getForObject(baseUrl, String.class, parameters);
}
}
- 请求结果
{"access_token":"24_OFOdJ0nwQ_pYKotAAoiONve42GVGkz8zYEspPZ3I5aH2tUVvCHfCB8uVDE4Dc8aBEf8mHI6_jPTOJRSmIbEEL9X5vdEevwUuItVZeSk-HHZcRPK3MQUzXuhl593D-SNiIxf00aznDU3QKHjoDGHhAEAWZA","expires_in":7200}
restTemplate.getForObject();这里一共有三种方式,我采用的是其中的一种,这里我用的方法第一个参数是要传递你需要调用的接口地址(参数也要加上),第二个参数是接口返回值映射的实体类,第三个参数是参数集合。