详解RestTemplate的三种使用方式
作者:MySelf 时间:2023-06-07 16:30:45
什么是RestTemplate
传统情况下在java代码里访问restful服务,一般使用Apache的HttpClient。不过此种方法使用起来太过繁琐。spring提供了一种简单便捷的模板类来进行操作,这就是RestTemplate。
准备
服务端我是用的是一个普通的API
@RestController
public class ServerController {
@GetMapping("/msg")
public String msg(){
return "this is product' msg";
}
}
第一种方式
直接使用restTemplate,url写死
@Slf4j
@RestController
public class ClientController {
@GetMapping("/getProductMsg")
public String getProductMsg(){
// 1、第一种方式(直接使用restTemplate,url写死)
RestTemplate restTemplate = new RestTemplate();
String response = restTemplate.getForObject("http://localhost:9082/msg",String.class);
log.info("response={}",response);
return response;
}
}
第二种方式
第二种方式(利用loadBalancerClient通过应用名获取url,然后再使用restTemplate)
@Slf4j
@RestController
public class ClientController {
@Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping("/getProductMsg")
public String getProductMsg(){
//2、第二种方式(利用loadBalancerClient通过应用名获取url,然后再使用restTemplate)
ServiceInstance serviceInstance = loadBalancerClient.choose("PRODUCT");
String url = String.format("http://%s:%s",serviceInstance.getHost(),serviceInstance.getPort()) + "/msg";
RestTemplate restTemplate = new RestTemplate();
String response = restTemplate.getForObject(url,String.class);
log.info("response={}",response);
return response;
}
}
第三种方式
第三种方式(利用@LoadBalanced,可再restTemplate里使用应用名字)
@Component
public class RestTemplateConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
@Slf4j
@RestController
public class ClientController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/getProductMsg")
public String getProductMsg(){
//3、第三种方式(利用@LoadBalanced,可再restTemplate里使用应用名字)
String response = restTemplate.getForObject("http://PRODUCT/msg",String.class);
log.info("response={}",response);
return response;
}
}
github项目
Cloud2Sell
来源:https://segmentfault.com/a/1190000016796830
标签:RestTemplate,使用
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
java文件操作之Path,Paths,Files
2023-11-19 15:34:34
Android批量插入数据到SQLite数据库的方法
2022-09-28 06:18:06
C#通用邮件发送类分享
2022-05-03 01:35:36
Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)
2022-07-31 14:39:23
C#使用RestClient调用Web API
2022-05-30 04:13:09
android实现文件下载功能
2022-07-29 18:03:10
![](https://img.aspxhome.com/file/2023/0/130410_0s.jpg)
Opencv光流运动物体追踪详解
2023-06-21 11:55:31
![](https://img.aspxhome.com/file/2023/4/91994_0s.jpg)
Android串口通信之串口读写实例
2023-11-04 00:11:03
详解C# 泛型中的数据类型判定与转换
2023-05-03 08:08:36
![](https://img.aspxhome.com/file/2023/2/80082_0s.png)
浅谈Java 中的引用类型
2023-07-25 16:33:38
Android7.0中关于ContentProvider组件详解
2023-10-30 19:48:29
Spring自定义参数解析器代码实例
2023-07-02 15:08:06
探讨:如何使用委托,匿名方法对集合进行万能排序
2022-06-15 02:17:23
Spring Boot 2.X 快速集成单元测试解析
2023-11-11 02:45:05
![](https://img.aspxhome.com/file/2023/3/61503_0s.jpg)
Android 系统语言切换监听和设置实例代码
2021-08-06 16:18:25
Java数据封装树形结构代码实例
2022-04-12 08:11:44
WPF自定义控件和样式之自定义按钮(Button)
2022-04-09 14:39:32
![](https://img.aspxhome.com/file/2023/5/108825_0s.gif)
JAVA中Comparable接口和自定义比较器示例讲解
2023-11-20 22:16:32
Java适配器模式_动力节点Java学院整理
2021-09-06 10:50:53
![](https://img.aspxhome.com/file/2023/6/65636_0s.jpg)
mybaties plus selectMaps和selectList的区别说明
2021-07-15 11:18:29
![](https://img.aspxhome.com/file/2023/5/68225_0s.png)