我正在尝试使用 Spring Boot 创建具有以下内容的应用程序:
第 3 方 HttpServlet 需要映射到“/data/*”以匹配以下内容:
- “/Patient”作为“/data/Patient”给出
- “/_services/*”作为“/data/_services/something”给出
然后我需要添加一个新的服务选项。我想使用使用“/data/_services/smart/”请求映射的 RestController 来执行此操作。
此外,我希望其他端点,如“/health”、“/management”,由调度程序 servlet 提供服务。如果我使用映射到“/”的默认调度程序 servlet,则“/health”、“/management”工作正常。
如果我为第 3 方 servlet 添加 ServletRegistrationBean,则“/data/Patient”等请求可以正常工作。@Bean public ServletRegistrationBean data() { HapiFhirServlet servlet = new HapiFhirServlet(myAppCtx, metadataRepository); ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(servlet, "/data/*"); 返回 servletRegistrationBean;}
但我无法将 RestController 映射到“/data/_services/smart”。我在尝试:
@Bean
@Autowired
public ServletRegistrationBean smartServicesRegistrationBean(DispatcherServlet dispatcherServlet) {
return new ServletRegistrationBean(dispatcherServlet, "/data/_services/smart/*");
}
一旦我添加了这个 ServletRegistrationBean,路径“/data/_services/smart/ ”就起作用了,第 3 方 servlet 的路径起作用了,但是其他调度程序请求(“/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/*");
}
}