3

さて、私はSpringを使用しているプロジェクトに参加しています。実行時例外が発生し、SimpleMappingExceptionResolverによって処理されるタイミングを知る限り、登録されたインターセプターのpostHandleメソッドが呼び出されると、モデルは空になります。見る。

Spring MVCがどのように連携するかについてはよくわかりませんが、SimpleMappingExceptionResolverが一種の例外をModelAndViewにマップしたと思いました。そして、インターセプターがモデルに物を詰め込むために利用できるこのModelAndViewオブジェクト。そうでない場合は、インターセプターにnullのModelAndViewが表示される理由を教えてください。

乾杯、クリス。

4

2 に答える 2

1

同じケースがあるかどうかはわかりませんが、私の場合、ModelAndView が null であるためにシステムが View を解決できなかった場合、「404 リクエストが見つかりません」という通知ページを表示したいと考えています。最初に、SimpleMappingExceptionResolver を使用して、「404 request not found」の viewNames のマップに入れようとしました (viewNames は「/404NotFound」を呼び出します)。しかし、正しい例外が見つかりません。

最後に、私のケースを解決するために私がしたことは、web.xml を変更してこれを配置することです。

    <error-page>
    <error-code>404</error-code>
    <location>/404NotFound</location>
    </error-page>

また、404NotFound を処理するためのコントローラーは必要ない (そのままレンダリングするだけ) ため、このコードを mvc のアプリケーション コンテキストに配置します。

    <mvc:view-controller path="/404NotFound"/>
于 2014-02-14T08:59:01.430 に答える
1

@masted のコメントを展開しています。リクエストが ExceptionResolver によって処理され、ドキュメントによるHanlerInterceptor#afterCompletionとビューのレンダリング後にメソッドが呼び出される場合、実際にはインターセプターは呼び出されないため、どちらも役に立ちません。

これに対する私の解決策は、インターセプターを拡張して自動配線する独自のExceptionHandlerを作成することでした。AbstractHandlerMethodExceptionResolver次に、ビュー名を my に設定し、ModelAndViewそこに例外を設定した後、インターセプターのpostHandle()メソッドを呼び出します。

それは比較的きれいで、私がそれを機能させた唯一の方法です。

于 2014-03-04T12:52:37.557 に答える