2016-07-27 20 views
5

私は、バックエンド用のSpringブートとフロントエンド用のモジュール2を使って、mavenを使ってアプリケーションを開発しようとしています。Springの起動と角度2でのURL処理の問題

角度2のフロントエンドは、プロジェクトのsrc/main/resources/staticディレクトリにあります。

ブラウザに​​というURLを入力すると、すべてが問題ありません。角度2のフロントエンドにアクセスでき、フロントエンドは残りのAPIと完全に通信できます。私の角度2のルーティングはうまくいきます:フロントエンドのリンクをクリックすると、正しいページに移動し、ブラウザのURLバーに正しいものが表示されます(http://localhost:8080/documents

しかし、問題は私が直接同じURLをブラウザに書き込んでください。 Springはフロントエンドを引き継いで、/documentsのマッピングがないと言っています。

スプリングブートに「/api/*」のURLだけをリッスンし、他のすべてをフロントエンドにリダイレクトする方法はありますか?ここで

は私の春のコントローラクラスである:ここで

@RestController 
@RequestMapping("/api") 
public class MyRestController { 

    @Autowired 
    private DocumentsRepository documentRepository; 

    @CrossOrigin(origins = "*") 
    @RequestMapping(value = "/documents/list", 
      method = RequestMethod.GET, 
      produces = "application/json") 
    public Iterable<RfDoc> findAllDocuments() { 
     return documentRepository.findAll(); 
    } 

} 

は、メインアプリケーションクラスである:ここで

@SpringBootApplication 
public class Application { 

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

} 

は私app.route.tsです:

import { provideRouter, RouterConfig } from '@angular/router'; 
import { DocumentComponent } from './doc.component'; 

const routes: RouterConfig = [ 
    { 
     path: '', 
     redirectTo: 'documents', 
     pathMatch: 'full' 
    }, 
    { 
     path: "documents", 
     component: DocumentComponent 
    } 
]; 

export const appRouterProviders = [ 
    provideRouter(routes) 
]; 
+0

/api/*のみを聞く方法があります。そのためには、フィルタが必要です。 – sparrow

+0

どうすればいいですか?私はこのようなことにはまったく新しいです... – Eric

答えて

3

[OK]を、だから私は完璧に良い解決策を見つけました(私にとっては少なくとも):URLに#を付けて、古いAngularJS 1.Xの方法で自分の位置を変更します(すなわち、 http://localhost:8080/#/documents)。

この動作を得るために、私はこれが誰かを助けることができるこの

import { bootstrap }  from '@angular/platform-browser-dynamic'; 
import { HTTP_PROVIDERS } from '@angular/http'; 

import { AppComponent }   from './app.component'; 
import { appRouterProviders } from './app.routes'; 
import { AuthService }   from './auth.service'; 

bootstrap(AppComponent, [AuthService, 
    appRouterProviders, 
    HTTP_PROVIDERS, 
    { provide: LocationStrategy, useClass: HashLocationStrategy } 
]); 

希望のように私のブートストラップを変えます!

+0

ugltハッシュタグ表記を使用しないでください。HTML5の位置付け戦略を維持して、すべてのangular2の経路をindex.htmlファイルにリダイレクトしてください。エンドポイントのリソース(残りのコントローラ)に必要なすべてのルートをリダイレクトしないでください。 – AndroidLover

+0

どのようにリダイレクトを行うことができますか? – Eric

+0

エリック質問を作成してリンクを投稿してください。 – AndroidLover

関連する問題