Spring Boot を使用して、次のアプリケーションを作成しようとしています。
サードパーティの HttpServlet は、次のように「/data/*」にマップする必要があります。
- 「/data/Patient」として指定された「/Patient」
- 「/data/_services/something」として指定された「/_services/*」
次に、新しいサービス オプションを追加する必要があります。「/data/_services/smart/」のリクエスト マッピングを使用していた RestController を使用して、これを実行したかったのです。
さらに、「/health」や「/management」などの他のエンドポイントをディスパッチャ サーブレットで処理する必要がありました。「/」にマッピングされたデフォルトのディスパッチャ サーブレットを使用すると、「/health」、「/management」が正常に機能します。
サードパーティのサーブレットに ServletRegistrationBean を追加すると、「/data/Patient」などのリクエストは正常に機能します。@Bean public ServletRegistrationBean data() { HapiFhirServlet サーブレット = new HapiFhirServlet(myAppCtx, metadataRepository); ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(サーブレット, "/data/*"); サーブレット登録Beanを返します。}
しかし、「/data/_services/smart」で RestController をマップできません。やっています:
@Bean
@Autowired
public ServletRegistrationBean smartServicesRegistrationBean(DispatcherServlet dispatcherServlet) {
return new ServletRegistrationBean(dispatcherServlet, "/data/_services/smart/*");
}
この ServletRegistrationBean を追加するとすぐに、パス「/data/_services/smart/ 」が機能し、サード パーティのサーブレットのパスが機能しますが、他のディスパッチャー リクエスト (「/health」、「/management」) は失敗します。「/」または「/data/_services/smart/」のいずれかにしかディスパッチャを配置できないようですが、両方には配置できません。
誰かアドバイスしてもらえますか?
ここに私のアプリケーションクラスがあります:
@EnableAutoConfiguration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, /*securedEnabled = true, */proxyTargetClass = true)
@Import({OAuth2ResourceConfig.class, MethodSecurityConfig.class})
@ComponentScan
public class HSPCReferenceApiApplication extends SpringBootServletInitializer {
@Autowired
private WebApplicationContext myAppCtx;
@Autowired
private MetadataRepository metadataRepository;
public static void main(String[] args) {
SpringApplication.run(HSPCReferenceApiApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(HSPCReferenceApiApplication.class);
}
@Bean
public ServletRegistrationBean data() {
HapiFhirServlet servlet = new HapiFhirServlet(myAppCtx, metadataRepository);
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(servlet, "/data/*");
return servletRegistrationBean;
}
@Bean
@Autowired
public ServletRegistrationBean smartServicesRegistrationBean(DispatcherServlet dispatcherServlet) {
return new ServletRegistrationBean(dispatcherServlet, "/data/_services/smart/*");
}
}