SpringBoot远程接口调用-RestTemplate使用

摘要:
在web服务中,调度远程url是常见的使用场景,最初多采用原生的HttpClient,现采用Spring整合的RestTemplate工具类进行.实操如下:  1.配置主要用以配置远程链接的相关参数.@ConfigurationpublicclassRestTemplateConfig{@BeanpublicRestTemplaterestTemplate(ClientHttpRequestFac

在web服务中,调度远程url是常见的使用场景,最初多采用原生的HttpClient,现采用Spring整合的RestTemplate工具类进行.实操如下:

  1. 配置

主要用以配置远程链接的相关参数.

@Configuration
public classRestTemplateConfig {
    @Bean
    publicRestTemplate restTemplate(ClientHttpRequestFactory factory) {
        return newRestTemplate(factory);
    }
    @Bean
    publicClientHttpRequestFactory simpleClientHttpRequestFactory() {
        SimpleClientHttpRequestFactory factory = newSimpleClientHttpRequestFactory();
        factory.setConnectTimeout(15000);
        factory.setReadTimeout(5000);
        returnfactory;
    }
}

  2.实际使用

此处以post请求为例,使用RestTemplate时主要有以下三种方式:postForObject/postForEntity/exchange

@Autowired
privateRestTemplate template;
        String url = "http://192.168.2.40:8081/channel/channelHourData/getHourNewUserData";
        //封装参数,千万不要替换为Map与HashMap,否则参数无法传递
        MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
        paramMap.add("dt", "20180416");
        //1、使用postForObject请求接口
        String result = template.postForObject(url, paramMap, String.class);
        System.out.println("result1==================" +result);
        //2、使用postForEntity请求接口
        HttpHeaders headers = newHttpHeaders();
        HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(paramMap,headers);
        ResponseEntity<String> response2 = template.postForEntity(url, httpEntity, String.class);
        System.out.println("result2====================" +response2.getBody());
        //3、使用exchange请求接口
        ResponseEntity<String> response3 = template.exchange(url, HttpMethod.POST, httpEntity, String.class);
        System.out.println("result3====================" + response3.getBody());   

  3.实操演示

昨日在与其它服务做对接数据时,发现对方实际接收数据有误,换了几种请求方式,要么就是编码有误/要么就是请求体展示有误,随着问题排查的深入,还出现了框架层面报错类转换异常的问题

代码如下 :

// 发送请求
String url = callback;
HttpHeaders requestHeaders = new HttpHeaders();
//requestHeaders.add("Content-Type","application/x-www-form-urlencoded");
requestHeaders.add("charset","UTF-8");
requestHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
LinkedMultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>();
paramMap.add("message","Ok");
paramMap.add("code","200");
paramMap.add("data",data.toJSONString());
HttpEntity<LinkedMultiValueMap<String,Object>> httpEntity = new HttpEntity<>(paramMap, requestHeaders);
ResponseEntity<String> exchange = restTemplate.postForEntity(url,httpEntity,String.class);
String resultRemote = exchange.getBody();

注意事项:

1.与接口方约定好请求头信息 , 如 此处的媒体类型值即为 :application/x-www-form-urlencoded

2.在使用HttpEntity时,注意请求体,value需为String类型.原因在于:Spring框架在遍历请求体参数时,会强转为String,故此处code设置为 "200"

免责声明:文章转载自《SpringBoot远程接口调用-RestTemplate使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C语言中access、_mkdir、sprintf、 fopen、fwrite函数Oracle Dedicated server 和 Shared server(专用模式 和 共享模式) 说明下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用javaMail接收邮件(比较全)

package org.davidfang.mail;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutpu...

xml中“ &amp;lt; &amp;gt; ”转义为“ &amp;amp;lt; &amp;amp;gt; ”问题处理

曾经也碰到过类似问题,解决方法是在发送或者解析报文前执行上面的方法将内容转义一下,现在我用dom4j组装如下的报文(报文体中内容传输时加密处理),大致介绍一下上面方法的使用,具体看代码。 importjava.io.StringReader; importjava.io.StringWriter; importjava.math.BigDecima...

C#探秘系列(九)WPF连接Mysql数据库

两个函数即可搞定: private void GetData() { MySqlConnection connection = new MySqlConnection(myConnectionString); connection.Open(); if (conn...

(七) SpringBoot起飞之路-整合SpringSecurity(Mybatis、JDBC、内存)

兴趣的朋友可以去了解一下前五篇,你的赞就是对我最大的支持,感谢大家! (一) SpringBoot起飞之路-HelloWorld (二) SpringBoot起飞之路-入门原理分析 (三) SpringBoot起飞之路-YAML配置小结(入门必知必会) (四) SpringBoot起飞之路-静态资源处理 (五) SpringBoot起飞之路-Thymel...

【二】、.net core 3.1 windows服务读取appsetting的步骤

1、在appsetting里添加节点 { "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } },...

Android蓝牙开发技术学习总结

Android开发,提供对蓝牙的通讯栈的支持,允许设别和其他的设备进行无线传输数据。应用程序层通过安卓API来调用蓝牙的相关功能,这些API使程序无线连接到蓝牙设备,并拥有P2P或者多端无线连接的特性。 蓝牙的功能: 1、扫描其他蓝牙设备 2、为可配对的蓝牙设备查询蓝牙适配器 3、建立RFCOMM通道(其实就是尼玛的认证) 4、通过服务搜索来链接其他的设备...