2017-01-16 27 views
0

Spring MVCを介してREST APIを公開するSpringブートアプリケーションがあります。Springブート埋め込みTomcatはスタンドアロンとは異なる動作をします

私は最後に末尾のスラッシュでリソースにアクセスできる組み込みのTomcatを使用して、ローカルに自分のアプリケーションを実行します - 私は、スタンドアロンのTomcatインスタンスへの戦争を展開するときに、私が得る、しかし、例えばPOST /リソース/

をURLに後続のスラッシュを含めると404が表示されますが、末尾にスラッシュが付きません(POST /リソースなど)。

組み込みのTomcatは、スラッシュの後ろにスラッシュを付けたり、スラッシュを付けたりしないで動作します。

私の要求のマッピングが

@RequestMapping(value = "/resource", method = RequestMethod.POST) 

である私は、私が見ることができる唯一の違いは組み込みTomcatがV8で、スタンドアロンのはV7である

@Override 
public void configurePathMatch(PathMatchConfigurer matcher) { 
    matcher.setUseRegisteredSuffixPatternMatch(true); 
    matcher.setUseTrailingSlashMatch(true); 
} 

などの構成オプションのすべての種類を試してみました。両方とも全く同じソースコードを実行しますが、動作は異なります。

誰でもこの問題を解決する方法をアドバイスできますか?

ありがとうございました

+0

スタンドアロンのTomcat 8を試してみて、それがどのように動作するかを見ていないのはなぜ? –

+0

@AndyWilkinson良いアイデア...ありがたいことに私はそれを理解しており、これをデバッグするだけの新しい環境をセットアップする必要はありません! – FMC

答えて

1

私は問題を解決できました。

何らかの理由で、Tomcat 7は、後続のスラッシュを含むリクエストをウェルカムファイル(index.jsp)にマップしようとしていました。また、setUseTrailingSlashMatchがtrueに一致しているにも関わらず、要求マッピングが "/"に指定されていない限り、要求に末尾のスラッシュが含まれていると、エンドポイントも認識されません。

この動作は、埋め込みのtomcat(v8)ではミラー化されていません。

私は、web.xmlから歓迎のファイルを削除し、私の要求にマッピングを更新することで問題を解決:

@RequestMapping(value = {"/resource","/resource/"}, method = RequestMethod.POST) 
関連する問題