• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

ResponseEntityExceptionHandler 클래스에 대한 질문입니다.

22.05.23 18:00 작성 조회수 238

0

컨트롤러에서 예외발생시에

CustomizedResponseEntityExceptionHandler 클래스의 handleAllExceptions 메소드가 아니라 handleMethodArgumentNotValid 메소드가 실행되는 이유는 무엇인가요??

handleMethodArgumentNotValid 메소드는 ResponseEntityExceptionHandler 클래스의 handleException 메소드의 의해 실행되는 것 같은데 @ExceptionHandler 어노테이션에서 조금 더 좁은 범위를 지정한 메소드가 발동하는건가요?? 

 

답변 2

·

답변을 작성해보세요.

1

안녕하세요, 이도원입니다. 

CustomizedResponseEntityExceptionHandler 클래스의 handleMethodArgumentNotValid 메소드와 @ExceptionHandler로 선언된 메소드는 실행되는 시점이 다름니다. 예를들어, UserController의 createUser() 메소드에서 사용자 생성에 전달되는 파라미터에 오류가 발생하면, ResponseEntityExceptionHandler 클래스의 handleException에서 handleMethodArgumentNotValid메소드가 실행되고, Controller 내부(빈 내부)에서 예외 발생시 (DB저장 시, 다른 처리에 의한 예외발생 시)에는 @ExceptionHandler에 선언한 예외가 실행됩니다. 

감사합니다. 

0

kyoulho님의 프로필

kyoulho

질문자

2022.05.25

강사님의 친절한 설명에도 아직 잘 이해가 안되는게

handleAllExceptions 메소드는 @ExceptionHandler(Exception.class) 어노테이션이 붙어있고

handleException 메소드는 @ExceptionHandler 어노테이션에 많은 Exception 클래스의 자손 클래스들이 포함되어 있는데요.

저는 @ExceptionHandler 어노테이션 내부에 정확하게 예외를 적어놓은 메소드가 실행되는 거라고 생각했는데 어떤 메소드가 실행될지는  프레젠테이션 레이어인가 하위 레이어인가로 구분된다는 말씀이신가요??