spring 예외처리 @ExceptionHandler, @ControllerAdvice, @RestControllerAdvice

-·2023년 2월 13일
0

spring 예외처리

여러가지 공통 handler를 만들수있는데 exception역시 내가 잡아서 커스텀할수있다.

@ControllerAdvice
public class ErrorControllerAdvice {
	@ExceptionHandler(Exception.class)
	public ModelAndView ExceptionHandler(Exception e) {
		ModelAndView mav = new ModelAndView();
		log.debug("===== ErrorControllerAdvice =====");
		mav.setViewName("/url...");
		return mav;
	}
}

이것도 어노테이션이 잘되어 있어서 만드는 방법자체는 쉽다.

저렇게하면 예외가 뜨면 저곳으로 다 모일것이다.

어노테이션을 하나씩 뜯어봅시다

@ExceptionHandler

사용법 자체는 이렇게하면 된다.

@ExceptionHandler(잡을 예외 종류)

@ExceptionHandler({종류1, 종류2})

@ExceptionHandler 자체는 등록되어있는 @Controller, @RestController에서만 동작한다.

@Service 나 @Repository에서는 동작을 안한다는 소리다.

@Controller
or 
@RestController
public class SampleController {
    // ...
    @ExceptionHandler(Exception.class)
    public String sampleHandler(Exception e) {
        // ...
    }
}

이렇게 하면 이 해당 컨트롤러 안에서 발생하는 exception은 여기로 모일것이다.

하지만 우리가 기대하는것은 보통 이런게 아닐것이다.

전역적으로 동작하도록 다른 컨트롤러에서 발생하는 exception도 한번에 다 잡아서 보고 싶을것이다.

@ControllerAdvice, @RestControllerAdvice

그럴때 필요한게 @ControllerAdvice, @RestControllerAdvice이다

이러면 모든 controller에서 발생하는게 잡힐것이다.

내가 젤 처음에 작성한 코드가 그 예시이다

RestControllerAdvice는 예상가능할것이다.

@ControllerAdvice + @ResponseBody

이러면 전역적으로 사용이 가능하다.

profile
거북이는 오늘도 걷는다

0개의 댓글