在Spring Boot中,META-INF /资源与@EnableWebMVC无法正常工作

时间:2013-10-11 04:21:49

标签: spring spring-mvc spring-boot

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。然后,下一步是使用Apache Tiles作为我的主要Web项目,因此我创建了一个@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

我应该采取什么配置来解决此问题?

非常感谢。

1 个答案:

答案 0 :(得分:3)

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

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

这暗示Spring Boot正在做某事以自动猜测你有静态内容并在META-INF / resources中正确设置上面的例子。它并不是真正“神奇”,而是他们使用@EnableWebMvc的默认Java配置,它具有一些非常可靠的默认值。

当你提供自己的@EnableWebMvc时,我的猜测是你正在覆盖他们的“默认”。为了添加一个资源处理程序,你可以这样做:

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

这相当于上面的XML。