봄 부팅 도로 프라이머 (9) --- 글로벌 예외 핸들러 프로그램

면책 조항 :이 문서는 블로거 원본입니다, 추적 에 의해-SA의 CC 4.0 저작권 계약, 복제, 원본 소스 링크이 문을 첨부 해주세요.
이 링크 : https://blog.csdn.net/Geffin/article/details/100170833

웹 프로그램 이상이 발생했을 때, 그들은 아주 예쁜 클라이언트에서 직접 "허용 목록 라벨 오류 페이지"페이지를 표시하는 경향이있다. 따라서, 각 웹 응용 프로그램은 클라이언트가 통합 된 글로벌 예외 핸들러 프로그램을 통해 신속하고 친절한받을 수 있도록해야합니다.

1 봄 부트 기본 예외 처리 메커니즘

브라우저 클라이언트가 존재하거나 예외를 처리하는 서버가 발생하지 않는 페이지를 요청하면, 봄 부팅은 "허용 목록 라벨 오류 페이지"라는 문서의 기본 HTML 콘텐츠에 응답합니다.

의이 컨트롤러를 쓰자, 그것은 의도적 인 오류가 발생합니다

@Controller
public class IndexController {

	@RequestMapping("index")
    public String index(){
		int i = 1/0;
        return "index" ;
	}
}

그런 다음 우리는 브라우저를 열고 다음과 같이 페이지를 찾을 수 :
여기에 그림 삽입 설명

2 @ControllerAdvice하여 예외를 처리하기 위해 특수

우리는 지정된 예외를 달성하기 위해 주석 및 메모 @ExceptionHandler 특별 대우를 @ControllerAdvice 사용할 수 있습니다. 우리는 로컬 예외 처리를해야하는 경우, 글로벌 예외 핸들러를 필요로하는 경우, 당신은 @ControllerAdvice + @ExceptionHandler를 사용해야 할 수 @Controller + @ExceptionHandler를 사용합니다.

현지 예외 처리

현지 예외 처리, 예외가이 주석에 정의 될 때,이 메소드가 실행됩니다 슬로우되는 클래스의 방법 @ExceptionHandler 코멘트를 필요로한다. 클래스 인 경우 @ExceptionHandler @Controller,이 메소드는이 범주에서 작동 곳. 클래스가 @ControllerAdvice의 @ExceptionHandler 노트와 함께있는 경우,이 메소드는 전 세계적으로 역할을합니다.

예를 들어, 우리는 @ExceptionHandler를 사용하여 예외를 잡기 위해, 컨트롤러가 위의 사용 수정했다

@Controller
public class IndexController {

	@RequestMapping("index")
    public String index(){
		int i = 1/0;
        return "index" ;
	}
	
	@ExceptionHandler(Exception.class) 
    @ResponseBody 
    public String exHandler(Exception e){ 
      if(e instanceof ArithmeticException){ 
          return "/ by zero"; 
      } 
      return "others"; 
    }
}

다음 우리는 브라우저를 열고 다시
여기에 그림 삽입 설명
예외 @ExceptionHandler 처리하고 클라이언트에게 에러 메시지를 출력 한 것으로 나타났다.

글로벌 예외 핸들러

3.2 봄하는 주석을 추가 @ControllerAdvice.

우리는 단지 @ControllerAdvice 처리에 의해 컨트롤러 계층을 입력합니다 오류에주의를 지불 할 필요, 인터셉터 발생 오류 및 액세스 오류는 상황이 SpringBoot 기본 예외 처리 메커니즘에 의해 처리됩니다 해결합니다.

우리는 글로벌 예외 핸들러 클래스를 작성

@ControllerAdvice
public class ExceptionAdvice {

	@ResponseBody
    @ExceptionHandler(value = Exception.class)
    public Map<String,Object> exceptionHandler(Exception ex){
        Map<String,Object> map  = new HashMap<String,Object>();
        map.put("message", ex.getMessage());
        map.put("localizedmessage", ex.getLocalizedMessage());
        map.put("class", ex.getClass());
        map.put("stacktrace", ex.getStackTrace());
        map.put("suppressed", ex.getSuppressed());
        return map;
     }

}

상기 제어기는 예외가 발생하는 경우, 클라이언트에 표시된
여기에 그림 삽입 설명

우리가 코멘트에 지적 할 수 있다는 희망의 부적절 성이 시청 해 주셔서 감사합니다 경우이 문서는 단순히 글로벌 봄 부팅 예외 처리 방식을 소개합니다.

추천

출처blog.csdn.net/Geffin/article/details/100170833