SpringBoot 예외 처리 방법

4391 단어 프레임

SpringBoot 예외 처리 방식:


방식 1: 사용자 정의 오류 인터페이스


SpringBoot 기본 비정상 처리 메커니즘: SpringBoot 기본값은 이미 비정상 처리 메커니즘을 제공합니다.프로그램에 이상이 생기면 SpringBoot은/error의 URL처럼 요청을 보냅니다.springBoot에서/error 요청을 처리하기 위해 Basic Exception Controller를 제공합니다. 그리고 모든 이상을 사용자 정의 오류 페이지로 이동해야 한다면 src/main/resources/templates 디렉터리에서 error를 만들어야 합니다.html 페이지.



   

 
 



방식 2: @ExceptionHandle 메모 처리 예외

@Controller
public class Demo01Controller {
    @RequestMapping("/demo01")
    public String showInfo1(){
        String str = null;
        //      
        str.length();
        return "index";
    }
    @RequestMapping("/demo02")
    public String showInfo2(){
        int a = 10 / 0 ;
        return "index";
    }

    /**
     *   java.lang.ArithmeticException
     *   ModelAndView: 
     *  
     * @param  e   Exception e: 
     * @return
     */
    @ExceptionHandler(value = {java.lang.ArithmeticException.class})
    public ModelAndView arithmeticExceptionHandler(Exception e){
        ModelAndView mv = new ModelAndView();
        mv.addObject("error", e.toString());
        mv.setViewName("error1");
        return mv;
    }
    /**
     *   NullPointException  
     * @param e
     * @return
     */
   @ExceptionHandler(value = {NullPointerException.class})
    public ModelAndView nullpointException(Exception e){
        ModelAndView mv = new ModelAndView();
        mv.addObject("error",e.toString());
        mv.setViewName("error2");
        return mv;
    }

페이지 정보:
error1.html



    
     -ArithmeticException 


    ArithmeticException
   



error2.html



    
     -NullPointerException  


     NullPointerException
   



방식 3: @ControllerAdvice+@ExceptionHandler 메모 처리 예외

/**
 *       @ControllerAdvice
 */
@org.springframework.web.bind.annotation.ControllerAdvice
public class Global01Exception {
    /**
     *  
     * @param e
     * @return
     */
    @ExceptionHandler(value = {java.lang.NullPointerException.class})
    public ModelAndView arithmeticExceptionHandler(Exception e){
        ModelAndView mv = new ModelAndView();
        mv.addObject("error", e.toString());
        mv.setViewName("error1");
        return mv;
    }
}

방식 4: SimpleMappingExceptionResolver 처리 예외 구성

/**
 * @desc    SimpleMappingExceptionResolver  
 */
@Configuration  
public class Global02Exception {

    /**
     *      SimpleMappingExceptionResolver
     * @return
     */
    @Bean
    public SimpleMappingExceptionResolver getSimpleMappingExceptionResolver() {
        SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();
        Properties mappings = new Properties();
        /**
         *  1     
         *  2  
         */
        mappings.put("java.lang.NullPointerException", "error1");
        mappings.put("java.lang.ArithmeticException", "error2");
        // 
        resolver.setExceptionMappings(mappings);
        return resolver;
    }
}

방식 5: 사용자 정의 HandlerExceptionResolver 클래스 처리 예외

/**
 * @desc    HandlerExceptionResolver  
 */
@Configuration
public class Global03Exception implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        // 
        ModelAndView mv = new ModelAndView();
        //   
        if (e instanceof ArithmeticException){
            mv.setViewName("error1");
        }
        if (e instanceof NullPointerException){
            mv.setViewName("error2");
        }
        mv.addObject("error",e.getMessage());
        return mv;
    }
}

예에서thymeleaf 템플릿을 사용하여 다음과 같이 설정했습니다.
#  
spring.thymeleaf.cache=true
spring.thymeleaf.encoding=utf-8
spring.thymeleaf.mode=HTML
spring.thymeleaf.suffix=.html
spring.thymeleaf.prefix=classpath:/templates/

좋은 웹페이지 즐겨찾기