Пример обработки исключений Spring MVC

Пример обработки исключений Spring MVC

В веб-приложении J2EE / servlet вы можете отобразить страницу ошибки, чтобы указать исключение следующим образом:

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
  

Приведенный выше код должен быть самоанализом. Если в контейнере сервлета существует функция обработки исключений, почему нам все еще нужно использовать Spring для обработки исключения?

Как правило, есть две причины:

  1. Customize Error Page - Контейнер сервлета будет отображать страницу ошибки напрямую; В то время как Spring позволяет вам заполнять модель или данные на странице ошибок, чтобы вы могли настроить более удобную для пользователя страницу ошибок.

  2. Business logic - Spring позволяет применить дополнительную бизнес-логику перед отображением страницы с ошибкой, такую ​​как ведение журнала, аудит и т. д.

В этом уроке мы покажем вам два примера для обработки исключения в Spring.

  1. Для Spring 2.x мы используемSimpleMappingExceptionResolver в XML-файле.

  2. Для Spring 3.x мы можем упростить конфигурацию XML с помощью аннотации@ExceptionHandler.

1. Пример SimpleMappingExceptionResolver

Просмотрите структуру каталогов.

spring-mvc-exception-example-directory

Пользовательское исключение.

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;
    }

}

Этот класс контроллера просто выдастCustomGenericException с пользовательским кодом ошибки и описанием ошибки.

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");

  }

}

ПросмотритеSimpleMappingExceptionResolver ниже:

mvc-dispatcher-servlet.xml



    

    

    
    

    
      
        
            
                error/generic_error
            
            error/exception_error
        
      
    

    
        
            /WEB-INF/pages/
        
        
            .jsp
        
    

    

В выше, когда

  1. Выдается исключение CustomGenericException, оно сопоставляется с именем представления «error / generic_error».

  2. Любое другое Исключение выдается, оно сопоставляется с именем представления «error / exception_error».

На странице JSP вы можете получить доступ к экземпляру исключения через${exception}.

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 Пример

Начиная с Spring 3.0, появилась новая аннотация@ExceptionHandler для упрощения конфигурации XML. Ниже представлена ​​эквивалентная версия с использованием@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;

    }

}

Нечего объявлять в Spring XML-файле.

mvc-dispatcher-servlet.xml



    

    
        
            /WEB-INF/pages/
        
        
            .jsp
        
    

    

Скачать -SpringMvc-ExceptionHandler-Example.zip (15 КБ)

Note
Вас может заинтересовать этотSpring MVC @ExceptionHandler Example