0

私は持っている

@Controller
@RequestMapping(value="core/*")
public class CoreController {

    public static String exceptionOccurredView = "/core/exceptionOccurred";

    @ExceptionHandler(Throwable.class)
    public ModelAndView exceptionOccurred(Throwable exception, HttpServletResponse response, HttpServletRequest request) {
        ModelAndView mv = new ModelAndView();
        mv.setViewName ( exceptionOccurredView );
        mv.addObject   ( "requestedUrl", Core.getCurrentUrlWithParams() );
        mv.addObject   ( "exception", exception );

        System.out.println( "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + Core.getCurrentUrlWithParams() );
        return mv;
    }   

    @RequestMapping
    public void test0(HttpServletResponse response, HttpServletRequest request) throws IOException {
        throw new IOException();
    } 

}

これは、コア URL で発生するすべての例外に対して正常に機能します。

URLに行くと

ローカルホスト:8080/core/test0

エラーページが表示されます。また、私が行った場合:

ローカルホスト:8080/core/actionDoesNotExist

しかし、私が使用する場合:

ローカルホスト:8080/controllerDoesNotExist/test0

注釈 @ExceptionHandler はコントローラーごとにのみ有効であるため、エラーは表示されません。

では、コントローラーに接続されていないグローバルな例外/エラーハンドラーをどのように実現できますか?

4

1 に答える 1

1

1 つの方法は、の実装を使用することですHandlerExceptionResolver

たとえば、SimpleMappingExceptionResolver を使用するには、これをコンテキストに入れます。

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="exceptionMappings">
      <map>
         <entry key="IOException" value="io-error" />
      </map>
    </property>
    <property name="defaultErrorView" value="default-error"/>
</bean>

このようにして、例外からエラー ページへのグローバル マッピングを定義します。より複雑なエラー処理が必要な場合は、独自のリゾルバーを実装してください。

于 2012-04-04T13:14:28.767 に答える