0

に注入されていませんが、私はこのような私の春ブートアプリケーションでresttemplateを作成しました。しかし、私のインターセプターでは、これはnullpointer例外をスローします。春の雲Resttemplateが迎撃

私のインターセプタにloadbalanced(リボンを使用して)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; 
} 

インターセプタは、このような春のブートアプリケーションに追加されます。

@Configuration 
public class MyConfigAdapter extends WebMvcConfigurerAdapter { 

@Override 
public void addInterceptors(InterceptorRegistry registry) { 
    registry.addInterceptor(new MyInterceptor()).addPathPatterns("/*"); 
    } 
} 
+0

あなたのインターセプタについての詳細をご提示ください。答えが足りない情報があります。 – spencergibb

+0

@spencergibb、私のコードを追加しました。インターセプターに新しいRestTemplate(負荷分散されていない)を作成し、サービス名の代わりに「マイマイクロサービスのURLとポート番号」を使用すると正常に動作することが確認できます。 – Jayz

答えて

0

あなたはどのように@Autowired作品誤解します。 @Beanメソッドの外にあるnew MyInterceptor()のメソッドが終了すると、すぐにオートワイヤードにはなりません。

以下のようなものを実行します。

@Configuration 
public class MyConfigAdapter extends WebMvcConfigurerAdapter { 

    @Autowired 
    MyInterceptor myInterceptor; 

    @Override 
    public void addInterceptors(InterceptorRegistry registry) { 
     registry.addInterceptor(myInterceptor).addPathPatterns("/*"); 
    } 
} 
+0

一応正しいです。それは春の仕組みについて私の目を少し開いた。 autowiringを行うために@Componentをインターセプタに追加しなければなりませんでした。 – Jayz

+0

答えを受け入れるマインド? – spencergibb

関連する問題