Проблема загрузки изображений в Spring Boot / FreeMarker - PullRequest
0 голосов
/ 13 декабря 2018

Я работал над демонстрационным приложением, чтобы понимать шаблоны FreeMarker с помощью Spring Boot.Мне нравятся шаблоны FreeMarker, но я не могу получить изображения для отображения на веб-страницах.Я перепробовал все, что мог придумать, до размещения изображения и каталога изображений, но ничего не помогло.Я надеюсь, что кто-то может указать на мою проблему, так как, если я не могу решить эту проблему, я не могу использовать FreeMarker.

Мой каталог проекта выглядит так:

Spring Boot project directory

Я использую Spring Boot 2.1.1.

Я использую Bootstrap для форматирования страницы.Вот Bootstrap / HTML, который ссылается на изображение:

		<div class="row">
		    <div class="col-md-12">
			    <img src="/img/snowy_egret_thumb.jpg" />
		    </div>
	    </div> <!-- row -->
      

Я думал, что, возможно, я что-то упускаю в конфигурации FreeMarker, но я ничего не нашел.Мой класс конфигурации FreeMarker показан ниже:

@Configuration
@EnableWebMvc
@ComponentScan({"cognitodemo.freemarker"})
public class AppConfig implements WebMvcConfigurer,         
ApplicationContextAware {
   private ApplicationContext applicationContext = null;


   @Override
   public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
      this.applicationContext = applicationContext;
  }


@Bean
@Description("FreeMarker View Resolver")
public FreeMarkerViewResolver viewResolver(){
    FreeMarkerViewResolver viewResolver = new FreeMarkerViewResolver();
    viewResolver.setCache(false);
    viewResolver.setPrefix("");
    viewResolver.setSuffix(".html");
    return viewResolver;
}

@Bean
public FreeMarkerConfigurer freemarkerConfig() {
    FreeMarkerConfigurer freeMarkerConfigurer = new 
FreeMarkerConfigurer();
    freeMarkerConfigurer.setTemplateLoaderPath("/WEB-INF/views/");
    return freeMarkerConfigurer;
}

}

Когда я запускаю приложение с Spring Boot, я получаю следующее предупреждение:

WARN [0; 39m [35m13617 [0; 39m [2m]--- [0; 39м [2м [restartedMain] [0; 39м [36mo.sbafFreeMarkerAutoConfiguration [0; 39м [2м: [0; 39м] Не удается найти расположение шаблона: [classpath: / templates /] (пожалуйста, добавьте несколькошаблоны, проверьте конфигурацию FreeMarker или установите spring.freemarker.checkTemplateLocation = false)

Однако страницы приложения работают правильно.Просто изображение не загружается.

Любая помощь будет принята с благодарностью.Большое спасибо заранее.

1 Ответ

0 голосов
/ 13 декабря 2018

После множества хаков я наконец-то заставил загрузку изображения работать.Разница заключалась в добавлении метода addResourceHandler () в класс конфигурации AppConfig.Этот метод показан ниже:

public void addResourceHandlers(ResourceHandlerRegistry registry) {  
    registry.addResourceHandler("/img/**")
            .addResourceLocations("/img/")
            .addResourceLocations("classpath:/img/"); 
 }

Я также переместил каталог с изображениями так, чтобы он находился под webapp.Это показано ниже:

enter image description here

Я также добавил строку

spring.freemarker.checkTemplateLocation: false

в мой файл application.properties.

Обратите внимание, что каталог ресурсов все еще находится в каталоге views.Я не считаю это идеальным, так как я бы предпочел переместить его на тот же уровень, что и каталог img.Я пытался добавить код в обработчик ресурсов для этого, но мне это не удалось.Что у меня работает, так что я собираюсь пойти с этим.

Я опубликовал это приложение на GitHub.Смотри https://github.com/IanLKaplan/CognitoDemoFreeMarker

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