前提条件调用restTemplate交换或执行时出错

时间:2015-08-03 17:37:22

标签: rest netflix-eureka spring-restcontroller netflix-zuul spring-rest

我正在尝试调用休息服务。其余客户端和休息服务都在我的机器上运行在不同的端口。 execute和exchange方法都抛出空指针异常。我的休息客户端是Netflix Zuul过滤器(它使用Netflix Eureka Discovery代理注册)。我希望这没有什么区别但是, 堆栈跟踪的结尾似乎提到了'功能区'库。所以我猜错误可能与它有关。

我的Rest Client中只有@Autowired RestTemplate对象。我没有使用@LoadBalanced注释。

当我使用'Eureka Service'ID而不是localhost:端口号时,呼叫会成功执行。可能是根本案例?

restTemplate.exchange("http://localhost:8085/helloWorld, HttpMethod.GET, entity, HttpServletResponse.class);

异常堆栈跟踪:

Caused by: java.lang.NullPointerException: null
       at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:210) ~[guava-18.0.jar:na]
       at com.google.common.cache.LocalCache.get(LocalCache.java:3936) ~[guava-18.0.jar:na]
       at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941) ~[guava-18.0.jar:na]
       at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824) ~[guava-18.0.jar:na]
       at com.netflix.loadbalancer.LoadBalancerStats.getServerStats(LoadBalancerStats.java:167) ~[ribbon-loadbalancer-2.0-RC13.jar:na]
       at com.netflix.loadbalancer.LoadBalancerStats.getSingleServerStat(LoadBalancerStats.java:354) ~[ribbon-loadbalancer-2.0-RC13.jar:na]
       at com.netflix.loadbalancer.LoadBalancerContext.getServerStats(LoadBalancerContext.java:621) ~[ribbon-loadbalancer-2.0-RC13.jar:na]
       at org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.execute(RibbonLoadBalancerClient.java:71) ~[spring-cloud-netflix-core-1.0.0.RELEASE.jar:1.0.0.RELEASE]
       at org.springframework.cloud.client.loadbalancer.LoadBalancerInterceptor.intercept(LoadBalancerInterceptor.java:46) ~[spring-cloud-commons-1.0.2.RELEASE.jar:1.0.2.RELEASE]
       at org.springframework.http.client.InterceptingClientHttpRequest$RequestExecution.execute(InterceptingClientHttpRequest.java:84) ~[spring-web-4.1.5.RELEASE.jar:4.1.5.RELEASE]
       at org.springframework.http.client.InterceptingClientHttpRequest.executeInternal(InterceptingClientHttpRequest.java:69) ~[spring-web-4.1.5.RELEASE.jar:4.1.5.RELEASE]
       at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) ~[spring-web-4.1.5.RELEASE.jar:4.1.5.RELEASE]
       at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53) ~[spring-web-4.1.5.RELEASE.jar:4.1.5.RELEASE]
       at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:568) ~[spring-web-4.1.5.RELEASE.jar:4.1.5.RELEASE]
       at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:529) ~[spring-web-4.1.5.RELEASE.jar:4.1.5.RELEASE]
       at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:447) ~[spring-web-4.1.5.RELEASE.jar:4.1.5.RELEASE]

1 个答案:

答案 0 :(得分:1)

我错过了在配置类中注入restTemplate。一旦我将以下代码片段添加到我的配置类,它工作正常。其余的电话被调用了。

 @Bean
   RestTemplate restTemplate() {
       return new RestTemplate();
   }

在使用Eureka服务ID而不是网址时,不确定其余的通话如何正常工作。