6-1. Exception Handling

khs·2022년 3월 13일
0

Java Spring Boot

목록 보기
26/34

1. Java의 예외처리

Java의 NullPointerException은 런타임 예외이다. Java는 개체 참조에 특별한 null 값을 할당한다. 프로그램이 null 값으로 설정된 개체 참조를 사용하려고하면 이때 예외가 throw된다.

아래와 같이 try-catch문을 사용하기도 하고

또는 아래와 같이 throws를 붙여줘서 예외 처리를 호출하는 대상에게 전가하는 방법도 있다.

1. Spring Boot의 예외처리 방법들

  1. ResponseStatusExcption - 단발적 예외
  2. @ExceptionHandler - Controller 내부 예외
  3. HandlerExceptionResolver - 실제로 예외 처리하는 것을 구성, 전역적으로 애플리케이션 전체에 예외처리를 적용
  4. @ControllerAdvice - ExceptionHandler를 모아놓은 Bean

2. 실습

지난번에 작성했던 jpa 프로젝트를 그대로 이어서 작성한다.

1. ResponseStatusExcption

컨트롤러를 하나 작성한다. 코드 내용은 쉽게 이해할 수 있을 것이다. 일반적으로 예외를 사용하듯이 써주면 된다.

단발적인 예외는 잘 잡을 수 있으나 예를 들어 Board가 없는 것인지 Post가 없는 것인지 Board와 Post가 일치하지 않아서 생기는 문제인지에 대한 정보를 바로 나타내기가 어렵다. (같은 오류 문구가 생긴다.) -> ResponseStatusExcption은 초기단계에 사용한다.

2. @ExceptionHandler

@ExceptionHandler를 선언해서 함수에 붙이게 되면 이 함수는 지정된 예외에 대해서 그 예외를 처리해줄 때 동작한다.

이것을 제대로 사용하기 위해서 예외를 몇 가지 만들어보자. exception패키지를 만들고 그 안에 추상 클래스(자기 자신으로 사용할 수 없음)를 하나 정의를 한다.

그리고 이를 상속받는 클래스를 exception 패키지안에 만든다.

그리고 다시 컨트롤러로 가서 @ExceptionHandler 괄호 안에 위에서 작성해준 클래스를 기재해준다. 이것은 이 컨트롤러 내부에서 발생하는 모든 BaseException에 대해서 처리를 해준다. 따라서 여기에 맞게 함부명도 바꿔주자.

그리고 함수의 인자로 처리하고자 하는 exception을 받아줄 수 있다.

그리고 응답을 돌려줘야하는데 지금 상태에서는 돌려줄 내용이 없다. 따라서 exception 패키지 안에 새로운 클래스를 하나 만든다. 그리고 아래와 같이 Dto를 하나 만들고

컨트롤러에서의 handleBaseException 메소드를 수정한다.

그리고 아래와 같이 예외 상황을 만들 수 있게 컨트롤러 내에 메소드를 수정하자.

이렇게 하면 메시지가 없을테니까 메시지를 줄 수 있도록 구성을 바꿔보자.

그리고 프로젝트를 실행시키면 정상적으로 작동하는 것을 확인할 수 있다.

3.HandlerExceptionResolver, 4.@ControllerAdvice

는 조금 더 공부를 해야겠다..

profile
권혁상입니다. 행복코딩^_^

0개의 댓글