簡體   English   中英

Spring Boot 2 Maven目錄視圖解析器

[英]Spring Boot 2 Maven Directory View Resolver

我目前有一個使用Boot前端的Spring Boot應用程序。 我在Visual Studio中運行,並且通過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可能需要的任何指導看起來都值得贊賞。 我可以看到有一些可能正確或不正確的類:

例如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";
}

在您的家庭控制器中。 您還可以查看這個React.js和Spring示例

您將需要通過以下方式配置資源處理程序:

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

        registry.addResourceHandler("/**")
                .addResourceLocations("file:/path/to/dir/webapp/");
    }
}

請注意,在UNIX中,您將使用file:/而對於Windows,則使用file:/ file:///C:/path/to/dir/webapp/

然后將/重定向到index.html

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

我已經在MacOS上對其進行了測試,並且可以正常運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM