22년 9월 4일 작성된 글
예외처리 부분은 더 깊은 공부가 필요하다. 일단 단순한 예외 처리를 위한 공부이다.
사용자에게 에러 내용을 상세하게 보여줄 필요가 없다.
스프링에서 예외 처리 방식은 3가지가 있다. 가장 보편적으로 사용되는 방식은 3번째 방식이다.
1. try-catch
2. ExceptionHandler - 컨트롤러단에서 처리
3. Global Level ExceptionHandler - 컨트롤러에서 클라이언트에 전달 전에 처리
3번째 방식으로 예외처리를 하려면 다음과 같은 코드를 작성하면된다.
@RestController
@RestControllerAdvice // Controller 클래스에 공통된 기능을 적용하기 위해 AOP를 사용하는 어노테이션
public class GlobalExceptionHandler {
@ExceptionHandler(value=IllegalArgumentException.class) //IllegalArgumentException만을 처리하는 ExceptionHandler
public String handleArgumentException(IllegalArgumentException e) {
return "<h1>"+e.getMessage()+"<h1>";
}
}
@ControllerAdvice는 @Componenet 어노테이션을 가지고 있어 컴포넌트 스캔을 통해 스프링 빈으로 등록된다.
@RestControllerAdvice는 @Controlleradvice와 @ResponseBody 어노테이션으로 이루어져있고 HTML 뷰 보다는 Response body로 값을 리턴할 수 있다.
@ControllerAdvice is meta-annotated with @Component and therefore can be registered as a Spring bean through component scanning. @RestControllerAdvice is meta-annotated with @ControllerAdvice and @ResponseBody, and that means @ExceptionHandler methods will have their return value rendered via response body message conversion, rather than via HTML views.
출처 - 스프링 공식 문서
예외 관련 참고할 내용
https://jeong-pro.tistory.com/195
스프링 예외 처리 관련 참고할 내용
https://velog.io/@kiiiyeon/%EC%8A%A4%ED%94%84%EB%A7%81-ExceptionHandler%EB%A5%BC-%ED%86%B5%ED%95%9C-%EC%98%88%EC%99%B8%EC%B2%98%EB%A6%AC