web-dev-qa-db-ja.com

起動後にすべてのエンドポイントリストを取得する方法、Spring Boot

スプリングブーツで書かれた休憩サービスがあります。起動後にすべてのエンドポイントを取得したい。どうすればそれを達成できますか?この目的のために、起動後にすべてのエンドポイントをdbに保存し(まだ存在していない場合)、これらを許可に使用します。これらのエントリはロールに挿入され、ロールはトークンの作成に使用されます。

21
barbakini

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のすべてのエンドポイントをリストする別のエンドポイント(マッピングエンドポイント)を公開するSpringブートアクチュエーター(Springブートを使用していない場合でもアクチュエーターを使用することもできます)。このエンドポイントをヒットし、jsonを解析してエンドポイントのリストを取得できます。

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

22
Praneeth Ramesh