4

1.

我正在使用 Spring Boot。我的主课很简单

@ComponentScan
@EnableAutoConfiguration
@Configuration
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

#2。现在我想将我的静态内容外部化到一个 jar 文件中。所以,下面是jar项目

/pom.xml
/src/main/resources/META-INF/resources/hello.json // here is my resource

我这样做maven install并将依赖项放入主应用程序,正常运行该应用程序。现在我可以调用http://localhost:8080/hello.json来获取我的 hello.json 文件

#3。然后,下一步是为我的主要 Web 项目使用 Apache Tiles,因此我创建了一个@EnableWebMvc类来配置tilesViewResolver

@Configuration
@EnableWebMvc
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {
    public @Bean TilesViewResolver tilesViewResolver() {
        return new TilesViewResolver();
    }

    public @Bean TilesConfigurer tilesConfigurer() {
        TilesConfigurer ret = new TilesConfigurer();
        ret.setDefinitions(new String[] { "classpath:tiles.xml" });
        return ret;
    }
}

然后我再次启动应用程序并尝试hello.json确保一切仍然正常工作。但是,出现了 404 页面。删除WebMvcConfiguration回馈我的hello.json.

我应该做什么配置来解决这个问题?

非常感谢。

4

1 回答 1

3

在 Spring MVC 中,使用 XML 配置,您必须具有如下标记来服务静态内容:

<mvc:resources mapping="/js/**" location="/js/"/>

这暗示 Spring Boot 正在做一些事情来自动猜测您有静态内容并在 META-INF/resources 中正确设置上述示例。这并不是真正的“魔法”,而是他们有一个默认的 Java 配置,使用@EnableWebMvc它有一些非常可靠的默认值。

当您提供自己的@EnableWebMvc时,我的猜测是您正在改写他们的“默认”。为了重新添加资源处理程序,您可以执行以下操作:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/js/**").addResourceLocations("/js/").setCachePeriod(31556926);
}

这相当于上面的 XML。

于 2013-10-17T14:29:41.347 回答