2017-01-01 3 views
0

私はAngular2 + Spring Bootアプリケーションを開発中です。今のところ私は次のようにしています。
バックエンド:@RestController @RequestMappingでアノテーションされたメソッドを持つ1RestController。スプリングブート@RequestMappingアノテーション

@RequestMapping("/main") 
public Band[] main(@RequestParam(value="numberOfBands", required=false, defaultValue="3") int numberOfBands) throws ClientProtocolException, IOException {   
    return random(numberOfBands); 
} 

フロントエンド:初期化時
{ path: '', redirectTo: 'main', pathMatch: 'full' },
「/メイン」にリダイレクトapp.routing.tsは、私のmain.component.tsは、ばねに要求を送信し、応答としてオブジェクトの配列を取得します。コンポーネントは次のようになります。http://localhost:8090/に行くとき

export class MainComponent { 
    bands: Band[]; 
    errorMessage: string; 
    constructor(private bandService: BandService){ 
    //this.bands = new Array(3); 
    bandService.getRandomBands(3) 
    .subscribe(
     bands => this.bands = bands, 
     error => this.errorMessage = <any>error); 
    } 
}  

アプリが/mainにリダイレクトし、バンドが適切に渡され、コンポーネントによって解析されます。しかし、ページをリロードしようとする度にhttp://localhost:8090/main私はコンポーネントが正しく初期化されていないように見えるプレーンなJSONしか得られません。
私は春のブートがアドレスバーのパスを無視するようにしたいので、クライアント側だけに関係します。
質問は:それはサーバー側で問題なのですか、それとも何らかの形で不適切な方法でコンポーネントを初期化していますか?

UPDATE私はすべての私の@RequestMappingsに接頭辞「/ API」を追加し、(「等しい」機能をテストするだけである)、以下のように見えるフィルタを追加しました

if(requestURI.equals("/main")){ 
     RequestDispatcher requestDispatcher = httpServletRequest.getRequestDispatcher("/"); 
     requestDispatcher.forward(req, res); 
    } 
    chain.doFilter(req, res);   

その後、転送プロセスは期待通りに行われました。

答えて

0

リフレッシュすると、常にサーバーに要求が送信されます。たとえば、/api/...のような特定のパスの下にすべてのREST APIバックエンドを置くと、角度アプリケーションで使用される「偽の」URLがバックエンドの実際のURLと衝突しないようになります。

次に、これらの「偽の」角度URLへのすべてのリクエストを/index.htmlに転送するようにフィルタを設定します。

したがって、/mainへのリクエストは、フィルタによって傍受され、index.htmlに転送されます。角度の適用が開始されます。ルータは/mainのルートに移動します。コンポーネントは/api/mainにAJAXリクエストを送信します。このリクエストはであり、はフィルタによって/index.htmlに転送されないため、Spring RESTコントローラはそれを処理してJSONを処理します。

+0

春をビューとしてnullにしないため、クライアントは初期化されません。 –

+0

あなたは、フィルターがindex.htmlに転送するときを意味しますか?あなたはあなたが求めているものを明確にすることができますか? –

+0

あなたの答えに従おうとしましたが、スプリングブートアプリケーションがリクエストをindex.htmlにリダイレクトするとき、その値のrequestMappingはありません。そこで、voidを返すrequestMappingメソッドを追加しましたが、返されたビューはnullなので、角型アプリケーションは初期化されません。 –

関連する問題