2017-05-29 48 views
5

我成功地將我的Angular2應用程序與Spring Boot後端之後的this tutorial集成,將編譯後的JS資源放置到/ ui子目錄中。基本上一切正常,Angular2應用程序可通過appname/ui URL訪問。同一臺服務器上的Spring Boot + Angular2

不過,我想知道是否有一種方式來告訴Spring「直通」的網址,該/UI路徑的孩子,按照目前的春天攔截每一個請求針對/UI/* ,阻止Angular2路由器正確導航到路徑下的資源。

目前,我只有這個映射在我的控制器之一:

@RequestMapping(value = "/ui") 
public String uiIndex() { 
    return "/ui/index.html"; 
} 

這樣,接口正確的/UI顯示出來,但春天送我的錯誤和404的一切在它之下, 當我直接從瀏覽器解決它們。儘管Angular2應用程序內部的路由器導航工作正常。

編輯

我是從目標/ UI靜態/ UI文件夾中添加編譯Angular2資源與這一配置(我的項目使用Maven構建):

 <resource> 
      <directory>${project.basedir}/src/main/resources</directory> 
      <includes> 
       <include>*.properties</include> 
       <include>templates/*.*</include> 
      </includes> 
     </resource> 
     <resource> 
      <directory>target/ui</directory> 
      <targetPath>static/ui</targetPath> 
     </resource> 

至於要清楚,唯一的問題是,當我在諸如/ui/home/settings之類的瀏覽器中輸入URL時,Spring攔截請求並拋出錯誤。不過,我可以愉快地導航到/ ui,然後導航到Angular上下文中的/ home/settings。

+0

Spring引導應用程序中靜態資源的標準位置在src/main/resources/static下。只要把你的Angular資源放在那裏,Spring Boot就會爲他們服務。 –

+0

您可能需要一個以'/ **'結尾的映射。 – chrylis

+0

你見過https://github.com/spring-guides/tut-spring-security-and-angular-js/blob/master/modular/README.adoc嗎? – EpicPandaForce

回答

1

經過一番反覆試驗,我終於做到了我想做的事。非常感謝@EpicPandaforceuseful commentthis StackOverflow post

最終的解決方案是在一個@Controller這樣創建@RequestMapping

@RequestMapping(value = "/ui/**/{[path:[^\\.]*}") 
public String redirectUi() { 
    return "forward:/ui/index.html"; 
} 
0

您可以添加ResourceHandlers來配置Spring引導中的靜態內容服務。

@Configuration 
public class StaticResourceConfiguration extends WebMvcConfigurerAdapter { 
    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/ui").addResourceLocations("file:/path/to/your/angular/files"); 
    } 
} 

https://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-applications.html#boot-features-spring-mvc-static-content

現在,第5步你提到有這樣做的更清潔的方式,你跳過這一步的教程? (src/main/resources/static)

+0

請看我編輯的問題,我希望現在有點更清楚,我真正的問題是。 :) – Sleeper9

0

我認爲最簡單的方式做你想要的是使用角度哈希位置策略。

import { LocationStrategy, HashLocationStrategy } from '@angular/common';

{ provide: LocationStrategy, useClass: HashLocationStrategy }

我希望能幫助。

相關問題