Spring SimpleUrlHandlerMapping - 排除静态内容

时间:2017-12-21 16:23:25

标签: java spring spring-mvc spring-boot

我在Spring Boot 2中使用SimpleUrlHandlerMapping创建了一个专用的url映射器。

下面你可以看到一个简化的代码,它只使用一个控制器,只映射了2个url:/ url1和/ url2到PageController。

我的问题是,现在Spring不仅发送/ url1请求,而且还向PageController发送所有静态(js,css,...)请求。

为什么会发生这种情况,我该如何避免呢?

@Configuration
public class SimpleUrlHandlerMappingConfig {

    @Autowired
    private PageRepository pageRepository;

    @Bean
    public SimpleUrlHandlerMapping simpleUrlHandlerMapping() {
        SimpleUrlHandlerMapping simpleUrlHandlerMapping
                = new SimpleUrlHandlerMapping();

        Map<String, Object> urlMap = fillMappingsFromDb();
        simpleUrlHandlerMapping.setUrlMap(urlMap);
        return simpleUrlHandlerMapping;
    }

    private Map<String, Object> fillMappingsFromDb() {
        List<String> sefUrls = pageRepository.findMappings();
        Map<String, Object> urlMap = new HashMap<>();
        for (String sefUrl : sefUrls) {
            urlMap.put(sefUrl, page());
        }
        return urlMap;
    }

    @Bean
    public PageController page() {
        return new PageController();
    }
}

1 个答案:

答案 0 :(得分:0)

您可以指定要从默认调度程序servlet中排除的资源。

假设您的静态内容位于名为resources的目录中:

使用xml

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

在扩展WebMvcConfigurerAdapter

的类中使用java config
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}