RestTemplate使用

1. 调用第三方接口时,RestTemplate提供了比较方便的相关方法:

1)getForObject(String url, Class<T> responseType, Object... uriVariables)

2)  getForEntity(String url, Class<T> responseType, Object... uriVariables)

3)  postForObject(String url, Object request, Class<T> responseType, Object... uriVariables)

4)  postForEntity(String url, Object request, Class<T> responseType, Object... uriVariables)

2. 但是使用RestTemplate需要注意的一些地方:

如果项目中使用了负载均衡的相关配置,则注入RestTemplate时,要指定注入方式,以支持负载均衡。

如:@Qualifier(value="restful")

       @Autowired private RestTemplate restTemplate;

否则,就会报负载均衡的相关错误:

java.lang.IllegalStateException: No instances available for hq.sinajs.cn
        at org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.execute(RibbonLoadBalancerClient.java:75);

但是注意:

当通过restTemplate调用的是同项目内部的其他微服务时,@Qualifier(value="restful")则是万万不能加上的,这会让服务调用者认为这是远程服务调用。

如:String url = "http://{msName}/common/quartz/executeJob";

String msName = scheduleVO.getMsName(); -- 此为动态获取的微服务名
restTemplate.postForEntity(url, reqEntity, Result.class, msName);

将会报错:org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://system/common/quartz/executeJob": system; nested exception is java.net.UnknownHostException: system,

这是因为调用者将system当成远程服务的域名/ip,故此解析出错。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值