本篇文章给大家带来的内容是关于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;
}
}