【发布时间】:2015-10-04 08:17:47
【问题描述】:
对于我的 Spring Boot 应用程序,我混合了托管在 /static 中的静态内容(html、js、css 等),并结合了一个侦听 /api/1.0 调用的 REST Web 服务。 /static 由 Spring Boot 自动处理。对于 api 前缀,我创建了一个新的 servlet 调度程序,用于监听前缀地址:
@Configuration
public class DispatcherConfiguration {
public static final String API_PREFIX = "/api/1.0/*";
@Bean
public DispatcherServlet apiDispatcherServlet() {
DispatcherServlet dispatcher = new DispatcherServlet();
return dispatcher;
}
/**
* Setup route for the REST service located at @see API_PREFIX
* @return Servlet dispatcher
*/
@Bean
public ServletRegistrationBean apiDispatcher() {
DispatcherServlet dispatcher = apiDispatcherServlet();
ServletRegistrationBean registration = new ServletRegistrationBean(dispatcher, API_PREFIX);
registration.setName("api");
registration.setOrder(1);
return registration;
}
}
乍一看,这个配置解决了这个问题,因为现在调用 rest-api 使用设置的前缀并被转发到正确的控制器。乍一看,两个 servlet 仍然处理这两种类型的调用,因此静态内容现在也可以在 api 前缀处使用,并且控制器仍然可以在根 url 处访问。这并不是真正的意图。
spring文档在sections 15.12.4 and 15.12.5中提到了一些有趣的配置选项,但是这个结合Spring Boot和非xml配置的应用还不清楚。
我还找到了a post by Daniel,它详细解释了类似的问题,但它的设置比我所拥有的要复杂得多,而且我看不到将他的解决方案应用于我的用例的简单方法。
我已经尝试并测试了各种解决方案,但是关于这方面的文档很少,而且由于所有动态 Bean 加载,很难测试和找出某些东西为什么起作用或不起作用。我现在已经进入了几天,并且肯定被卡住了。
如何使用 java 配置将 servlet 对静态内容和控制器的处理分开?我的应用程序中的所有配置都是在 java 中完成的,所以我正在寻找(最好)一个无 xml 解决方案。
【问题讨论】:
标签: java spring spring-mvc servlets