私は答えを探していて、非常に似たような問題を解決したにもかかわらず、多くの回答が私の問題を解決しませんでした。Spring MVC @PathVariableは404エラーを返します
私の問題はこれです:文字 "/"を含む可能性のあるパス変数があります。同じ値には、 "。"などの他の特殊文字も含まれています。 "+" "="などすべての有効なBase64文字を含みます。
しかし、Spring MVCは、ハンドラが見つからないというログを持つ404をスローします。私はパス変数にも正規表現を使ってみましたが、役に立たなかった。そのため、私のコードスニペットは:
http://localhost:8080/sale/public/viewSaleDetails/b91a03730a746a2b27e1c7bbbd94ddf6a9df593301cd96c606348df5eed235da.FkJJbOqEM8Xvhffe6FwUdQ8/mMCD4+fxpY7w5L9kbJ8=
は私のURLです。/inパス変数の値があることがわかります。に加えて "。" 「+」および「=」を含む。文字 "m"と "8"を削除すると、Springはこれを正しくマップします。しかし、価値のあるものでは、それはちょうどうまくいきません。私は文字のフィルタリング、パス変数などの正規表現を含む多くのことを試してみてください。
また、リクエストパラメータを可能な限り使用したくありません。
@RequestMapping(value = "/public/viewSaleDetails/{id}", method = RequestMethod.GET)
は私のマッピングです。またURLはURLエンコーディングなしでブラウザからヒットします。私はブラウザのネットワークバーでそれを追跡し、それは期待どおりにそれをエンコードしません。私はSpring 4.2.8 RELEASEバージョンをjava 8とtomcat 8で使用しています。
私はしかし、あなたがいくつかのURL書き換えを使用することができ、春はPathVariablesに「/」扱うことができるならば、私はそれが動作しませんと思うわからないんだけどパブリック/ viewSaleDetails/{id}からあなたのPathVariableをあなたのコントローラに到達する前にRequestParam public/viewSaleDetails?id = xxに変換してください。 –