Java 无法打开ServletContext资源[/templates/show.xsl]

Java 无法打开ServletContext资源[/templates/show.xsl],java,spring-mvc,xslt,spring-boot,thymeleaf,Java,Spring Mvc,Xslt,Spring Boot,Thymeleaf,我有一个spring boot+thymeleaf应用程序,所以我基本上不使用xml文件进行配置。经典的html模板对我来说很好,但我在使用xsl时遇到了麻烦。我遵循了本教程,但最终得到了java.io.FileNotFoundException:无法打开ServletContext资源[/templates/show.xsl] 这就是我的配置类的外观 @Configuration @EnableWebMvc public class MvcConfiguration extends WebMv

我有一个spring boot+thymeleaf应用程序,所以我基本上不使用xml文件进行配置。经典的html模板对我来说很好,但我在使用xsl时遇到了麻烦。我遵循了本教程,但最终得到了
java.io.FileNotFoundException:无法打开ServletContext资源[/templates/show.xsl]

这就是我的配置类的外观

@Configuration
@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter {

    private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
            "classpath:/META-INF/resources/", "classpath:/resources/",
            "classpath:/static/", "classpath:/public/" };

    @Bean
    @Description("Thymeleaf template resolver serving HTML 5")
    public ClassLoaderTemplateResolver htmlTemplateResolver() {
        ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();

        templateResolver.setPrefix("templates/");
        templateResolver.setCacheable(false);
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode("HTML5");
        templateResolver.setCharacterEncoding("UTF-8");

        return templateResolver;
    }

    @Bean
    @Description("Thymeleaf template resolver serving XML")
    public ClassLoaderTemplateResolver xmlTemplateResolver() {
        ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();

        templateResolver.setPrefix("templates/");
        templateResolver.setCacheable(false);
        templateResolver.setSuffix(".xml");
        templateResolver.setTemplateMode("XML");
        templateResolver.setCharacterEncoding("UTF-8");

        return templateResolver;
    }

    @Bean
    @Description("Thymeleaf template engine with Spring integration")
    public SpringTemplateEngine templateEngine() {

        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.addTemplateResolver(htmlTemplateResolver());
        templateEngine.addTemplateResolver(xmlTemplateResolver());

        return templateEngine;
    }

    @Bean
    @Description("Thymeleaf view resolver")
    public ViewResolver viewResolver() {

        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();

        viewResolver.setTemplateEngine(templateEngine());
        viewResolver.setCharacterEncoding("UTF-8");

        return viewResolver;
    }

    @Bean
    public ViewResolver getXSLTViewResolver(){

        XsltViewResolver xsltViewResolver = new XsltViewResolver();
        xsltViewResolver.setOrder(1);
        xsltViewResolver.setSourceKey("xmlSource");

        xsltViewResolver.setViewClass(XsltView.class);
        xsltViewResolver.setViewNames(new String[] {"show"});
        xsltViewResolver.setPrefix("templates/");
        xsltViewResolver.setSuffix(".xsl");

        return xsltViewResolver;
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        if (!registry.hasMappingForPattern("/webjars/**")) {
            registry.addResourceHandler("/webjars/**").addResourceLocations(
                    "classpath:/META-INF/resources/webjars/");
        }
        if (!registry.hasMappingForPattern("/**")) {
            registry.addResourceHandler("/**").addResourceLocations(
                    CLASSPATH_RESOURCE_LOCATIONS);
        }
    }
}
我试图从controller重定向到xsl模板,如下所示:

    @RequestMapping(value="/form", method=RequestMethod.POST, params="action=show")
public ModelAndView show(@ModelAttribute Team team) throws MarshalException {
    Source source = new StreamSource(new ByteArrayInputStream(xmlService.getXmlStream(team).toByteArray()));
    // adds the XML source file to the model so the XsltView can detect
    ModelAndView model = new ModelAndView("show");
    model.addObject("xmlSource", source);
    return model;
}
这就是我的项目文件的外观。


如果您能给我一些建议,我将不胜感激。谢谢

如果您使用的是spring boot,则无需提及任何配置设置,如TemplateMode、前缀、后缀等。spring boot会根据默认设置自动配置模板。 不要在@configuration class或application.properties文件中提及任何配置。
试试这个,它对我有用。

将前缀更改为
classpath:/templates/
。另外,为什么要手动配置百里香叶,并禁用SpringBootWebMVC自动配置?我建议删除百里香叶配置并删除
@EnableWebMvc
,因为spring boot已经为您配置了所有这些。这些都是我尝试使其正常工作后留下的,
classpath:/templates/
非常有魅力,谢谢:)