0

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/*");
}
}
4

0 に答える 0