spring boot单元测试之RestTemplate(二)

上篇博客中,简单介绍了RestTemplate,只是用到了单元测试环节,如果在正式开发环境使用RestTemplate调用远程接口,还有一些配置要做。

一、配置类

由于Spring boot没有对RestTemplate做自动配置,所以我们需要写一个配置类引入RestTemplate。

复制代码
@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);//单位为ms
        factory.setConnectTimeout(5000);//单位为ms
        return factory;
    }
}
复制代码

二、工具类

在实际开发过程中,可能对于调用远程接口有多种参数情况,因此写了一个工具类用来支持。

RestTemplate功能非常强大,Post请求的时候特别要注意,body参数必须为MultiValueMap类型。

复制代码
@Service
public class RestTemplateService {
    @Autowired
    private RestTemplate restTemplate;

    /**
     * 实测可用
     */
    public JSONObject doGet(String url) {
        JSONObject json = restTemplate.getForEntity(url, JSONObject.class).getBody();
        return json;
    }

    /**
     * 实测可用
     */
    public JSONObject doGet(String url, HttpHeaders headers) {
        HttpEntity<String> entity = new HttpEntity<>(null, headers);
        ResponseEntity<JSONObject> exchange = restTemplate.exchange(url, HttpMethod.GET, entity, JSONObject.class);
        return exchange.getBody();
    }

    /**
     * 实测可用,body参数必须为MultiValueMap类型
     */
    public JSONObject doPost(String url, MultiValueMap<String, Object> param) {
        JSONObject json = restTemplate.postForEntity(url, param, JSONObject.class).getBody();
        return json;
    }

    /**
     * 实测可用,body参数必须为MultiValueMap类型
     */
    public JSONObject doPost(String url, MultiValueMap<String, Object> params, HttpHeaders headers) {
        JSONObject json = restTemplate.postForObject(url, new HttpEntity<>(params, headers), JSONObject.class);
        return json;
    }
    
}
复制代码

 

posted @   Mars.wang  阅读(1279)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示