JAN's History
@ControllerAdvice, @ExceptionHandler로 에러처리하기 본문
스프링 프레임워크에서의 에러 처리는 필수적인데요!
웹 개발을 하다보면 에러를 마주칠 때가 정말 많은데
Whitelabel Error Page
페이지를 그냥 띄워주게되면 사용자에게 좋지 않은 인터페이스를 보여줍니다.
그래서 우리는 개발자로서 Exception을 꼭 처리해줘야해요
예외 처리를 효과적으로 다루기 위해 @ControllerAdvice와 @ExceptionHandler 애노테이션을 사용할 수 있습니다.
@ControllerAdvice
- 이 애노테이션은 전역적인 예외 처리를 담당하는 클래스를 정의할 때 사용됩니다. 이 클래스는 모든 컨트롤러에서 발생하는 예외를 중앙 집중적으로 처리합니다.
@ExceptionHandler
- 이 애노테이션은 특정 예외 유형에 대한 처리 방법을 정의하는 메서드에 적용됩니다. 이 메서드는 해당 예외가 발생했을 때 호출되어 예외를 처리하고 적절한 응답을 생성합니다.
예를 들어, IllegalArgumentException이 발생했을 때 어떻게 처리할지를 정의하기 위해 handleArgumentException 메서드를 작성해보겠습니다. 이 메서드는 IllegalArgumentException을 처리하고 사용자에게 적절한 응답을 반환하는 로직이에요.
@GetMapping("dummy/user/{id}")
public User detail(@PathVariable int id){
User user = userRepository.findById(id).orElseThrow(()->{
return new IllegalArgumentException("해당 유저는 없습니다. id:"+ id);
});
return user;
}
@ControllerAdvice
@RestController
public class GlobalExceptionHandler {
@ExceptionHandler(value = IllegalArgumentException.class)
public String handleArgumentException(IllegalArgumentException e){
return "<h1>"+e.getMessage()+"</h1>";
}
}
1. "해당 유저는 없습니다 id: {id}"라는 message를 가진 채 Exception을 날리면,
2. @ControllerAdvice는 모든 Exception을 낚아채서 GlobalExceptionHandler class에 모이게 됩니다.
3. 그 중에서도 handleArgementException이 @ExceptionHandler(value = IllegalArgumentException.class) 으로 IllegalArgumentException 을 낚아채는 담당이기 때문에 해당 메서드가 실행됩니다.
이 메서드는 해당 예외의 메시지를 포함한 HTML 형식의 응답을 반환합니다.
➡️이러한 방식으로, 예외가 발생하더라도 사용자는 사용자 친화적인 응답을 받을 수 있습니다.
이러한 글로벌 예외 처리 기능을 이용하면 개발자는 각각의 컨트롤러마다 예외 처리 코드를 반복 작성할 필요 없이 예외를 일관되게 처리할 수 있습니다. 이는 코드의 중복을 방지하고 유지보수성을 향상시킵니다!
'스프링' 카테고리의 다른 글
Spring AOP를 이용한 전처리와 후처리 구현방법! (0) | 2024.05.25 |
---|---|
Ajax통신을 사용하는 2가지 이유 ex) 회원가입, 좋아요, 댓글.. (0) | 2024.05.22 |
스프링부트에서 AOP를 활용하여 Sentry 및 기본 파일로 Log 적용하기 (0) | 2024.05.02 |
DTO가 필요한 이유 (0) | 2024.04.29 |
<Optional>을 사용해야 하는 이유: Null 안전성과 명시적 코딩 (0) | 2024.04.17 |