웹 브라우저에서 예외가 발생 시 errorHtml()을 거쳐 ViewResolver를 통해 에러 페이지가 반환되고, 브라우저가 아닌 곳(Postman, Curl, 서버 등)에서 요청을 한다면 error()를 거쳐 에러 메세지을 받게 된다
BasicErrorController
- 스프링의 기본 예외 처리 방식
Custom error page
- 직접 에러를 반환받아 예외핸들러로 처리
@ExceptionHandler
- @Controller, @ControllerAdvice, @RestControllerAdvice 클래스의 메소드의 어노테이션으로 선언하여 예외 처리 수행
@ControllerAdvice(Spring3.2), @RestControllerAdvice(Spring4.3)
- @ExceptionHandler가 전역적으로 예외 처리
- @RestControllerAdvice는 @ControllerAdvice와 달리 @ResponseBody로 응답을 Json 으로 준다.
@ControllerAdvice
- @Controller나 @RestController에서 발생한 예외를, @ControllerAdvice 어노테이션을 추가한 클래스에서 Exception Handler를 통해 관리/처리
- 하나의 클래스에서 모든 컨트롤러의 예외 처리를 전역으로 수행
- 별도의 try-catch문이 없이, 코드 가독성 증가
Spring의 예외 처리 흐름
예외 처리기들이 스프링 빈으로 등록되어 있고, 예외가 발생 시, Resolver들이 처리가능한지 판별 후 예외 처리한다
1) ExceptionHandlerExceptionResolver: @Controller, @ControllerAdvice의 @ExceptionHandler 처리
2) ResponseStatusExceptionResolver: @ResponseStatus, ResponseStatusException 처리
3) DefaultHandlerExceptionResolver: 스프링 예외들 처리
ex) HttpMediaTypeNotSupportedException, NoHandlerFoundException 등
'JAVA > 1' 카테고리의 다른 글
alert message in java controller (0) | 2022.05.15 |
---|---|
Model / ModelAndView 정리 (0) | 2022.05.15 |
@RequestParam @RequestBody @ModelAttribute (0) | 2022.05.07 |
Content-Type (0) | 2022.05.06 |
415 error (0) | 2022.05.06 |