Spring подает * stati c контент в качестве приложения / json независимо от того, что - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть простое приложение Spring Boot с содержанием c. Я бы хотел, чтобы браузеры кэшировали не все, а только некоторые типы, например css. Поэтому я добавил следующую конфигурацию:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/css/**").addResourceLocations("/css/")
                .setCacheControl(CacheControl.maxAge(365, TimeUnit.DAYS));
}

Но теперь все файлы CSS являются серверными как Content-Type: application / json. Без этого кода они подаются как текст / css. Я не могу понять, что я делаю не так. Что-нибудь, что я должен проверить или добавить?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 24 февраля 2020

Я решил эту проблему, добавив аннотацию @EnableWebMvc и применив эту конфигурацию следующим образом:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/css/*.css")
            .addResourceLocations("classpath:/static/css/")
            .setCacheControl(CacheControl.maxAge(365, TimeUnit.DAYS))
            .resourceChain(true).addResolver(new PathResourceResolver());
    registry.addResourceHandler("/js/**")
            .addResourceLocations("classpath:/static/js/")
            .setCacheControl(CacheControl.maxAge(365, TimeUnit.DAYS))
            .resourceChain(true).addResolver(new PathResourceResolver());
    registry.addResourceHandler("/img/**")
            .addResourceLocations("classpath:/static/img/")
            .setCacheControl(CacheControl.maxAge(365, TimeUnit.DAYS))
            .resourceChain(true).addResolver(new PathResourceResolver());
    registry.addResourceHandler("/*.html")
            .addResourceLocations("classpath:/static/").setCachePeriod(0);
    registry.addResourceHandler("/*.png")
            .addResourceLocations("classpath:/static/").setCachePeriod(0);

}

@Bean
public InternalResourceViewResolver defaultViewResolver() {
    return new InternalResourceViewResolver();
}

В этом случае важен распознаватель.

Я предполагаю, что допустил некоторые ошибки, когда Использование функций Spring Boot и @EnableWebMvc очень помогло.

0 голосов
/ 19 февраля 2020

Вы должны указать расширение имени файла, например *. css хотите кешировать

@Configuration
public class BaseMvcConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/css/*.css").addResourceLocations("classpath:/static/").setCachePeriod(24 * 3600 * 365); 
registry.addResourceHandler("/static/js/*.js").addResourceLocations("classpath:/static/").setCachePeriod(0); 

}
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...