Spring MVC Ausnahmebehandlung mit HandlerExceptionResolver

Ich bin derzeit versuchen zu verwenden HandlerExceptionResolver für die Ausnahmebehandlung in einer Spring-MVC-Projekt.

Möchte ich behandeln normalen Ausnahmen über resolveException sowie 404 über
handleNoSuchRequestHandlingMethod.

Je nach Art der Anfrage JSON oder text/html ist der Ausnahme-Antwort zurückgegeben werden soll entsprechend.

resolveException funktioniert jetzt.

Aber handleNoSuchRequestHandlingMethod verursacht mir Kopfschmerzen. Es ist nie genannt!

Laut der Doku die Methode aufgerufen werden soll 404-Fehler

http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/servlet/mvc/support/DefaultHandlerExceptionResolver.html

Was mache ich falsch...

Dies ist, was ich habe, so weit.

public class JsonExceptionResolver implements HandlerExceptionResolver {

  protected final Log logger = LogFactory.getLog(getClass());

  public ModelAndView resolveException(HttpServletRequest request,
    if (exception instanceof NoSuchRequestHandlingMethodException) {
              return handleNoSuchRequestHandlingMethod((NoSuchRequestHandlingMethodException)             exception, request, response, handler);
    }
    ...                
  }

  public ModelAndView handleNoSuchRequestHandlingMethod(NoSuchRequestHandlingMethodException ex,
      HttpServletRequest request,
      HttpServletResponse response,
      Object handler){

    logger.info("Handle my exception!!!");

    ModelAndView mav = new ModelAndView();
    boolean isJSON = request.getHeader("Accept").equals("application/json");

    if(isJSON){
    ...

    }else{
    ..
    }

    return mav;
  }

}

BEARBEITEN mit DefaultHandlerExceptionResolver:

public class MyExceptionResolver extends  DefaultHandlerExceptionResolver {

  protected final Log logger = LogFactory.getLog(getClass());

  @Override
  protected ModelAndView doResolveException(HttpServletRequest request,  HttpServletResponse response, Object handler, Exception exception) {
    logger.warn("An Exception has occured in the application", exception);


    logger.info("exception thrown " + exception.getMessage() );
    if (exception instanceof NoSuchRequestHandlingMethodException) {
      return handleNoSuchRequestHandlingMethod((NoSuchRequestHandlingMethodException) exception, request, response, handler);
    }

    ...
    return mav;
  }

  public ModelAndView handleNoSuchRequestHandlingMethod(NoSuchRequestHandlingMethodException ex,
      HttpServletRequest request,
      HttpServletResponse response,
      Object handler){

    logger.info("Handle my exception!!!");

    ModelAndView mav = new ModelAndView();
    boolean isJSON = request.getHeader("Accept").equals("application/json");

    if(isJSON){

      ...
    }else{
      ...
    }

    return mav;
  }  
}

Den obigen code hat immer noch keine Wirkung.

Irgendwelche anderen Ideen?

InformationsquelleAutor Jeremy S. | 2011-08-29

Schreibe einen Kommentar