【问题标题】:Precondition Error while invoking restTemplate exchange or execute调用 restTemplate 交换或执行时出现前置条件错误
【发布时间】:2015-10-25 22:05:53
【问题描述】:

我正在尝试调用休息服务。其余客户端和其余服务都在我的机器上以不同的端口运行。执行和交换方法都抛出空指针异常。我的 rest 客户端是一个 Netflix Zuul 过滤器(它自己注册到 Netflix Eureka Discovery 代理)。我希望这不会产生影响,但是,堆栈跟踪的末尾似乎提到了“功能区”库。所以我猜这个错误可能与它有关。

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

当我使用“Eureka 服务”ID 而不是 localhost:port 号时,调用会成功执行。根本原因是什么?

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]

【问题讨论】:

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


    【解决方案1】:

    我错过了在我的配置类中注入 restTemplate。一旦我将以下代码 sn-p 添加到我的配置类中,它就可以正常工作。调用了其余调用。

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

    不确定在使用 Eureka 服务 ID 而不是 URL 之前,其余调用如何正常工作。

    【讨论】:

      猜你喜欢
      • 2022-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-27
      • 2018-04-10
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      相关资源
      最近更新 更多