Spring MVC-Ausnahmebehandlungsbeispiel

Beispiel für die MVC-Ausnahmebehandlung im Frühjahr

In der J2EE / Servlet-Webanwendung können Sie Fehlerseiten zuordnen, um eine Ausnahme wie die folgende anzugeben:

web.xml

  
    404
    /WEB-INF/pages/404.jsp
  

  
    com.example.web.exception.CustomException
    /WEB-INF/pages/error/custom_error.jsp
  

  
    java.lang.Exception
    /WEB-INF/pages/generic_error.jsp
  

Der obige Code sollte selbsterklärend sein. Wenn die Ausnahmebehandlungsfunktion im Servlet-Container vorhanden ist, warum müssen wir dann noch die Feder verwenden, um die Ausnahme zu behandeln?

Im Allgemeinen gibt es zwei Gründe:

  1. Customize Error Page - Der Servlet-Container rendert die Fehlerseite direkt. Mit Spring können Sie Modell oder Daten auf der Fehlerseite auffüllen, um eine benutzerfreundlichere Fehlerseite anzupassen.

  2. Business logic - Mit Spring können Sie zusätzliche Geschäftslogik anwenden, bevor Sie die Fehlerseite rendern, z. B. Protokollierung, Überwachung usw.

In diesem Tutorial zeigen wir Ihnen zwei Beispiele für die Behandlung der Ausnahme im Frühjahr.

  1. Für Spring 2.x verwenden wirSimpleMappingExceptionResolver in der XML-Datei.

  2. Für Spring 3.x können wir die XML-Konfiguration über die Annotation@ExceptionHandlervereinfachen.

1. SimpleMappingExceptionResolver Beispiel

Überprüfen Sie die Verzeichnisstruktur.

spring-mvc-exception-example-directory

Eine benutzerdefinierte Ausnahme.

CustomGenericException.java

package com.example.web.exception;

public class CustomGenericException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    private String errCode;
    private String errMsg;

    //getter and setter methods

    public CustomGenericException(String errCode, String errMsg) {
        this.errCode = errCode;
        this.errMsg = errMsg;
    }

}

Diese Controller-Klasse wirft einfach einCustomGenericException mit benutzerdefiniertem Fehlercode und Fehlerbeschreibung.

CustomerController.java

package com.example.web.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import com.example.web.exception.CustomGenericException;

public class CustomerController extends AbstractController {

  @Override
  protected ModelAndView handleRequestInternal(HttpServletRequest request,
    HttpServletResponse response) throws Exception {

    throw new CustomGenericException("E888", "This is custom message - ABC");

  }

}

Überprüfen Sie dieSimpleMappingExceptionResolver unten:

mvc-dispatcher-servlet.xml



    

    

    
    

    
      
        
            
                error/generic_error
            
            error/exception_error
        
      
    

    
        
            /WEB-INF/pages/
        
        
            .jsp
        
    

    

Oben, wenn

  1. CustomGenericException wird ausgelöst und dem Ansichtsnamen "error / generic_error" zugeordnet.

  2. Alle anderen Ausnahmen werden ausgelöst und dem Ansichtsnamen "error / exception_error" zugeordnet.

Auf der JSP-Seite können Sie über${exception} auf die Ausnahmeinstanz zugreifen.

pages/error/generic_error.jsp.jsp

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>



    
        

${exception.errCode} : System Errors

System Errors

${exception.errMsg}

spring-mvc-exception-handle-1

2. @ExceptionHandler-Beispiel

Seit Spring 3.0 gibt es eine neue Annotation@ExceptionHandler, um die XML-Konfiguration zu vereinfachen. Unten ist die äquivalente Version mit@ExceptionHandler.

CustomerController.java

package com.example.web.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.example.web.exception.CustomGenericException;

@Controller
public class CustomerController {

    @RequestMapping(value = "/customer", method = RequestMethod.GET)
    public ModelAndView getPages() throws Exception {

        throw new CustomGenericException("E888", "This is custom message X");

    }

    @ExceptionHandler(CustomGenericException.class)
    public ModelAndView handleCustomException(CustomGenericException ex) {

        ModelAndView model = new ModelAndView("error/generic_error");
        model.addObject("exception", ex);
        return model;

    }

    @ExceptionHandler(Exception.class)
    public ModelAndView handleAllException(Exception ex) {

        ModelAndView model = new ModelAndView("error/exception_error");
        return model;

    }

}

In der Spring-XML-Datei ist nichts zu deklarieren.

mvc-dispatcher-servlet.xml



    

    
        
            /WEB-INF/pages/
        
        
            .jsp
        
    

    

Laden Sie es herunter -SpringMvc-ExceptionHandler-Example.zip (15KB)

Note
Sie können an diesenSpring MVC @ExceptionHandler Example interessiert sein