Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringBoot2Maven目录视图解析器_Java_Spring_Maven_Spring Boot_Thymeleaf - Fatal编程技术网

Java SpringBoot2Maven目录视图解析器

Java SpringBoot2Maven目录视图解析器,java,spring,maven,spring-boot,thymeleaf,Java,Spring,Maven,Spring Boot,Thymeleaf,我目前有一个Spring引导应用程序,它的前端使用React JS。我在VisualStudio中运行,通过webpack编译资源并将其输出到Maven目标文件夹。您可以看到目录的结构,Java类位于“classes”文件夹中,客户机应用程序现在位于webapp文件夹中——请注意index.html 由于这是一个单页的应用程序,我只需要这个页面来解决。因此,我的控制器被配置为返回索引文件 @SpringBootApplication public class AdminApplication

我目前有一个Spring引导应用程序,它的前端使用React JS。我在VisualStudio中运行,通过webpack编译资源并将其输出到Maven目标文件夹。您可以看到目录的结构,Java类位于“classes”文件夹中,客户机应用程序现在位于webapp文件夹中——请注意index.html

由于这是一个单页的应用程序,我只需要这个页面来解决。因此,我的控制器被配置为返回索引文件

@SpringBootApplication
public class AdminApplication 
{

   public static void main( String[] args )
   {
      SpringApplication.run( AdminApplication.class, args );
   }

}

@Controller
public class DefaultController
{


   @RequestMapping( "/**" )
   public ModelAndView reactApp()
   {
      return new ModelAndView( "index" );
   }
}
现在。我的问题是告诉我的视图解析器与这个目录对话

正如您从注释代码中看到的,我只尝试了几百个选项,试图让它解析视图。我已经在documentRoot上找到了我的项目目录的完整文件路径,所以如果必要的话,我可能需要它

我在控制器中放置了一个断点,它肯定会被命中,每次试图找到相关视图时,它只会返回404。任何关于我的viewResolver可能需要的外观的指导都将不胜感激。我可以看出有几个类可能是正确的,也可能是不正确的:

e、 g.SpringResourceTemplateResolver和ClassLoaderTemplateResolver-不确定哪一个与我的需求最相关

@EnableWebMvc
@Configuration
public class MvcConfig implements WebMvcConfigurer,ApplicationContextAware {

   private ApplicationContext context;

   @Value("${server.document-root:}")
   private String documentRoot;

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


   // private ITemplateResolver htmlTemplateResolver() {
   // SpringResourceTemplateResolver resolver = new
   // SpringResourceTemplateResolver();
   // resolver.setApplicationContext(applicationContext);
   // resolver.setPrefix(documentRoot);
   // resolver.setCacheable(false);
   // resolver.setTemplateMode(TemplateMode.HTML);
   // return resolver;
   // }




   // @Bean
   // public SpringResourceTemplateResolver templateResolver() {
   // SpringResourceTemplateResolver templateResolver = new
   // SpringResourceTemplateResolver();
   // templateResolver.setPrefix( "/webapp/" );
   // templateResolver.setCacheable(false);
   // templateResolver.setSuffix(".html");
   // templateResolver.setTemplateMode("HTML");
   // return templateResolver;
   // }
   private ITemplateResolver templateResolver() {
      SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
      resolver.setApplicationContext(context);
      resolver.setPrefix("templates/");
      resolver.setSuffix(".html");
      resolver.setTemplateMode(TemplateMode.HTML);
      return resolver;
    }


   //  public ITemplateResolver templateResolver() {

   //    ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();

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

   //       return templateResolver;
   // }


}

您不需要MvcConfig

只需将src/main/resources/application.properties中的static locations属性设置为
spring.resources.static locations=classpath:/webapp/

将所有可能的请求映射到索引页,如:

@GetMapping({"/index","/","/home"})
public String reactApp()
   {
      return "/index.html";
   }

可选您可以将请求重定向到索引页

@GetMapping({"/index","/","/home"})
public String reactApp()
   {
      return "redirect:/index.html";
   }

您不需要MvcConfig类,Spring boot自动配置视图解析器。你所要做的就是把你的模板放到
src/main/resources/templates/
目录下,然后做一个简单的控制器映射,如下所示

@RequestMapping(value = "/")
public String index() {
    return "index";
}
在您的家庭控制器中。
您还可以查看此

您需要配置资源处理程序,这样:

@Configuration
public class StaticResourceConfiguration implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {

        registry.addResourceHandler("/**")
                .addResourceLocations("file:/path/to/dir/webapp/");
    }
}
请注意,在unix中,您将使用
文件:/
和for windows
file:///C:/path/to/dir/webapp/

然后将
/
重定向到
index.html

@RequestMapping
@RestController
public class IndexEndpoint {
    @GetMapping("/")
    public String reactApp() {
        return "/index.html";
    }
}

我已经在MacOS上测试了它,它工作得很好。

不幸的是,它没有工作。解析模板“/index.html”时出错,模板可能不存在或无法由任何配置的模板解析程序访问org.thymeleaf.exceptions.TemplateInputException:解析模板“/index.html”时出错,模板可能不存在或无法由任何配置的模板访问Resolvers@Squiggs. “我只需要这个页面来解决”所以你不需要thymeleaf。