1

コントローラ内のすべてのリクエストマッピングが着信リクエストと一致しないとどうなりますか? Exception.classをキャッチしている例外ハンドラを使用していましたが、それをキャッチしていないようですか?誰でも説明できますか?Spring MVC要求マッピングがない場合の例外はどのように処理されますか?

+0

ルート '/'に2つのマッピングがあり、 '/ api'にもう1つのマッピングがある場合、それは最も近いマッチングを行います。 apiだけが/ apiによって処理されますが、他のものは私が信じる根と一致します。それであなたが好きなものは何でも処理できます。やってみました ? – bhantol

+0

はい、現時点ではGETリクエストを行っていますが、マッピングがないので(すべてPOSTリクエストのマッピングです)、エラー/例外(HTTP 400ページにつながるもの) GETのためのリクエストマッピング –

+0

私はあなたを正しく理解しています。もしマップされていないリクエストが来た場合は、ステータスコード404のページになります。ハンドラを正しく実装していない可能性があります。プロジェクトにweb.xmlが含まれている場合は、 ' 'タグを使用して設定できます。場合は、注釈の設定ビューに関連する投稿に基づいて:http://stackoverflow.com/questions/13356549/handle-error-404-with-spring-controllerとあなたがスプリングのブートを使用している場合は、 'EmbeddedServletContainerCustomizer'を定義し、コントローラーで処理するエラーページです。 – GVArt

答えて

1

documentation@ExceptionHandlerによると、コントローラの実行中に発生する予期しない例外を処理します。着信要求が要求マッピングに一致しない場合、コントローラメソッドは実行されません。

サーブレット技術に基づくSpring-MVC。すべての着信要求はDispatcherServletweb.xmlに登録されています)で処理されます。 DispatcherServletは、現在の要求を処理できるハンドラを探します。適切なハンドラが見つからない場合(すなわち、適切なマッピングされたコントローラの方法が見つからない場合)、DispatcherServletは404エラーを開始する。 エラーが発生すると、Webコンテナ(Tomcatまたは他のサーブレットコンテナ)が例外メッセージを含むデフォルトページを生成します。ただし、コンテナが特定の例外の特定のエラーページを返すように指定することもできます。 locationは春MVCによって処理されます

... 

<servlet> 
    <servlet-name>dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<error-page> 
    <error-code>404</error-code> 
    <location>/page-not-found</location> 
</error-page> 

... 

のでいつもの要求として、あなたがこれを処理するコントローラを作成することができます。プロセスのためにこのエラーが手動でweb.xml新しいerror-page要素に追加する必要があり、それはあなたがURLにエラーコードをマップできるようになりますリクエスト:

@Controller 
public class ExceptionController{ 

    @RequestMapping("/page-not-found") 
    public ModelAndView pageNotFound(){ 
     return new ModelAndView("page-not-found"); 
    } 

} 

は今、名前だけpage-not-found.jspでビューを作成し、あなたが望むように例外情報を表示します。

関連する問題