欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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();这里一共有三种方式,我采用的是其中的一种,这里我用的方法第一个参数是要传递你需要调用的接口地址(参数也要加上),第二个参数是接口返回值映射的实体类,第三个参数是参数集合。