@GetMapping("/instructor-edit-course")
private String instructorAddCourse(Model model) {
model.addAttribute("course", new Course());
return "instructor-edit-course";
}
Над кодом все в порядке. Ресурсы найдены. Но когда я добавляю @PathVariable к пути, как показано ниже, приложение ищет ресурсы в
http://localhost: 8080 / instructor-edit-course / assets / images / icon / нижний колонтитул / facebook-square@2x.png
вместо
http://localhost: 8080 / assets / images / icon / footer / facebook-square@2x.png
@GetMapping("/instructor-edit-course/{id}")
private String instructorEditCourse(@PathVariable String id, Model model) {
// go to course page
Course course = courseService.findById(Integer.parseInt(id));
model.addAttribute("course", course);
return "instructor-edit-course";
}
Класс WebConfig
package com.hrglob.elearning.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Description;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.thymeleaf.spring5.SpringTemplateEngine;
import org.thymeleaf.spring5.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"com.xxxx.*"})
public class WebConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/assets/**")
.addResourceLocations("/public", "classpath:/static/", "classpath:/static/assets/")
.setCachePeriod(31556926);
}
@Bean
@Description("Thymeleaf template resolver serving HTML 5")
public ClassLoaderTemplateResolver templateResolver() {
var templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setPrefix("templates/");
templateResolver.setCacheable(false);
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML5");
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setOrder(0);
return templateResolver;
}
@Bean
@Description("Thymeleaf template engine with Spring integration")
public SpringTemplateEngine templateEngine() {
var templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
@Bean
@Description("Thymeleaf view resolver")
public ViewResolver viewResolver() {
var viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setCharacterEncoding("UTF-8");
return viewResolver;
}
}