Весна (с нефритом) Ресурсы

Эта проблема

Мое приложение весенней загрузки недавно изменило маршрутизацию с хоста / конечной точки на хост / середину / конечную точку. После внесения изменений я столкнулся с проблемой, когда ресурсы не были найдены относительно новой структуры URL. Раньше я мог ссылаться на ресурсы, такие как таблицы стилей CSS, такие как link (rel = 'stylesheet', href = 'css / style.css'), но теперь программа регистрации выдает ошибку, в которой говорится, что не может найти ресурс в / middleman / css / style.css.

Из моего исследования я обнаружил, что мне нужно использовать реестр обработчиков ресурсов. Я создал один (как показано ниже), но он не работает. Я думаю, что проблема в том, что, хотя у меня теперь есть реестр ресурсов, я не ссылаюсь на ресурсы в реестре. Как правильно решить эту проблему и обеспечить загрузку всех ресурсов из одного места независимо от конечной точки? Я очень хорошо могу пропустить какой-то очевидный кусок СОП

Примечание. Это все извращенное представление моего проекта, чтобы дать представление о том, что происходит, без предоставления ненужной информации.

Структура проекта

src
  main
    java
      com.mystuff.cool
        configurations
          ResourceConfiguration.java
        controllers
          RoutingController.java
        application
          Application.java
  resources
    static
      css
        footer.css
        style.css
      images
        place1.png
        location1.png
        spot1.png
        favicon.ico
      javascripts
        layout.js
    templates
      home.jade

Класс приложения

@ComponentScan(basePackages = {"my.packages"})
@EnableAutoConfiguration
@EnableSAMLSSO
@Configuration
public class Application
{
    public static void main(String[] args)
    {
        SpringApplication.run(new Object[]{ Application.class, ServiceConfig.class, ResourceConfiguration.class}, args);
    }
}

Конфигурация ресурса

@EnableWebMvc
@Configuration
public class ResourceConfiguration extends WebMvcConfigurerAdapter
{
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry)
    {
        registry.addResourceHandler("/css/**").addResourceLocations("/css/").setCachePeriod(31556926);
        registry.addResourceHandler("/img/**").addResourceLocations("/img/").setCachePeriod(31556926);
        registry.addResourceHandler("/js/**").addResourceLocations("/js/").setCachePeriod(31556926);
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer)
    {
        configurer.enable();
    }
}

контроллер

@Controller
public class RoutingController
{    
    @RequestMapping("/house/home")
    public String home(Model model)
    {
        model.addAttribute("title", "Home is where the heart is");
        commonModelTribs(model);
        return "home";
    }
}

Домашняя страница

doctype html
html
  title Place-spedia #{title}
  link(rel='icon', href='images/favicon.ico')
  link(rel='stylesheet', href='css/style.css')  
  script(src='javascripts/layout.js')
  link(rel='stylesheet', href='css/footer.css')
body
    div#footer-icons
        a(href='place1')
            img#place1(src="images/place1.png")
        a(href='location1')
            img#location1(src="images/location1.png")
        a(href='spot1')
            img#spot1(src='images/spot1.png')

1 ответ

Решение

Если вы используете весеннюю загрузку, вам не нужно беспокоиться о конфигурации ресурса, поскольку вы уже настраиваете каталог ресурсов через автоматическую настройку. Поведение по умолчанию для автоконфигурации - смотреть в resources/static,

Ваша проблема связана с вашими значениями href, попробуйте вставить начальную косую черту:

link(rel='icon', href='/images/favicon.ico')
link(rel='stylesheet', href='/css/style.css')  
script(src='javascripts/layout.js')
link(rel='stylesheet', href='/css/footer.css')

Spring направляет ваше приложение на новый относительный путь, поэтому / в вашем href атрибуты, вы говорите маршрутизатору смотреть абсолютно в static каталог, а не относительно middle каталог.

Другие вопросы по тегам