Spring Cloud-RestTemplate不会注入拦截器

发布于 2021-02-02 11:35:30

我在Spring Boot应用程序中创建了一个resttemplate,如下所示:

@Configuration
public class MyConfiguration {

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

自动接线时,在所有类中都可以正常工作。但是,在我的拦截器中,这引发了nullpointer异常。

原因可能是什么?如何在拦截器中配置负载平衡(使用功能区)resttemplate?

更新:

我的拦截器:

 public class MyInterceptor implements HandlerInterceptorAdapter {

  @Autowired
  RestTemplate restTemplate;

  public boolean preHandle(HttpServletRequest request,
    HttpServletResponse response, Object handler)
    throws Exception {

    HttpHeaders headers = new HttpHeaders();
    ...
    HttpEntity<String> entity = new HttpEntity<String>(headers);

    //restTemplate is null here
    ResponseEntity<String> result = 
    restTemplate.exchange("<my micro service url using service name>", 
                          HttpMethod.POST, entity, String.class);
    ...

    return true;
}

拦截器像这样添加到Spring Boot应用程序中:

@Configuration  
public class MyConfigAdapter extends WebMvcConfigurerAdapter  {

@Override
public void addInterceptors(InterceptorRegistry registry) {
   registry.addInterceptor(new MyInterceptor()).addPathPatterns("/*");
    }
}
关注者
0
被浏览
132
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    您误会了@Autowired工作原理。一旦您new MyInterceptor()处于@Bean方法之外,它就不会自动连接。

    执行以下操作:

    @Configuration  
    public class MyConfigAdapter extends WebMvcConfigurerAdapter  {
    
        @Autowired
        MyInterceptor myInterceptor;
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(myInterceptor).addPathPatterns("/*");
        }
    }
    


推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看