2017-04-21 6 views
4

私はスプリングブートで書かれた休憩サービスを持っています。私は起動後にすべてのエンドポイントを取得したい。どうすればそれを達成できますか? これの目的は、(もし存在しなければ)起動後にすべてのエンドポイントをdbに保存し、これらを認証のために使用したいのです。これらのエントリは役割に注入され、役割はトークンの作成に使用されます。起動後にすべてのエンドポイントリストを取得する方法、スプリングブート

+0

いくつかのコードを投稿し、試したことを説明してください。 – jhhoff02

答えて

6

アプリケーションコンテキストの開始時にRequestMappingHandlerMappingを取得できます。

public class EndpointsListener implements ApplicationListener { 

    @Override 
    public void onApplicationEvent(ApplicationEvent event) { 
     if (event instanceof ContextRefreshedEvent) { 
      ApplicationContext applicationContext = ((ContextRefreshedEvent) event).getApplicationContext(); 
      applicationContext.getBean(RequestMappingHandlerMapping.class).getHandlerMethods().forEach(/*Write your code here */); 
     } 
    } 
} 

代わりに、あなたはまた、JSONにすべてのエンドポイントを示しています別のエンドポイント(マッピングエンドポイント)を公開している(また、あなたは春のブートを使用していないにもかかわらず、actutatorを使用することができます)ブートアクチュエータを春することができます。このエンドポイントにヒットし、jsonを解析してエンドポイントのリストを取得できます。

https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html#production-ready-endpoints 
+0

こんにちは、ありがとうございました。私はabout/mappings endpointについて知っていますが、私のシナリオでは役に立たないです。私は私のサービスが起動時にエンドポイントにテーブルをロードしたいと思っています。/mappingsは他のリクエスタにエンドポイントリストを提供します。 私はあなたのコード断片を試してみます。 – barbakini

+0

resttemplateを使用すると、ApplicationListener.onApplicationEvent()で/ mappingsエンドポイントを呼び出し、エンドポイントを取得してデータベースに保存できます。 –

+0

すべてのマイクロサービスからエンドポイントを収集する中央リソースリスナーサービスを作成すると、私は/マッピングを使用できます。それ以外の場合は私には少し奇妙なようです – barbakini

関連する問題