@ControllerAdvice와 @RestControllerAdvice는 모두 Spring에서 예외를 처리하기 위해 사용되는 어노테이션
주로 반환하는 데이터 형식과 관련된 차이가 있습니다. 이를 통해 예외 처리 방식에 조금 다른 동작을 할 수 있습니다.
@ControllerAdvice
- 용도: @ControllerAdvice는 일반적으로 @Controller에서 발생하는 예외를 처리하는 데 사용됩니다.
- 특징:
- @ControllerAdvice는 뷰 템플릿 (예: JSP, Thymeleaf)을 사용하는 웹 애플리케이션에서 주로 사용됩니다.
- @ControllerAdvice는 예외 처리 메서드에서 반환되는 객체가 뷰 이름이나 ModelAndView일 수 있다는 점을 고려합니다.
- 보통 @ResponseBody가 명시되지 않은 경우, 반환 값이 뷰 이름으로 해석되어 템플릿 엔진을 통해 렌더링됩니다.
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ModelAndView handleException(Exception e) {
ModelAndView modelAndView = new ModelAndView("error");
modelAndView.addObject("message", e.getMessage());
return modelAndView;
}
}
@RestControllerAdvice
- 용도: @RestControllerAdvice는 RESTful 웹 서비스에서 예외를 처리하는 데 사용됩니다.
- 특징:
- @RestControllerAdvice는 REST API에서 발생하는 예외를 처리하는 데 사용됩니다.
- @RestControllerAdvice는 **@ResponseBody**를 포함하고 있기 때문에, 예외 처리 메서드에서 반환되는 객체는 자동으로 JSON 형식으로 응답됩니다.
- @RestControllerAdvice는 반환 값을 JSON이나 XML 형태로 처리하여 클라이언트에 전달합니다.
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public ErrorResponse handleException(Exception e) {
return new ErrorResponse("Error", e.getMessage());
}
}
차이점 요약
주요 사용처 | 일반적인 MVC 기반 웹 애플리케이션 | RESTful API 서비스 |
응답 형식 | 뷰 템플릿으로 렌더링 (예: JSP, Thymeleaf) | JSON 또는 XML (자동 @ResponseBody) |
특징 | @ResponseBody가 필요하지 않음 | 자동으로 @ResponseBody가 적용됨 |
따라서 일반적인 경우라면, @RestControllerAdvice를 사용하는 것이 좋을 것 같음.
'IT 정보 > Spring' 카테고리의 다른 글
[Spring] Spring Bean의 조건부 활성화/비활성화 방법 5가지 (2) | 2025.04.16 |
---|---|
[Spring] 스프링 AOP (Spring AOP)란 무엇인가? 프록시 기반 AOP, @AOP (4) | 2025.04.15 |
[Spring] application.yml 설정 (1) | 2022.08.18 |
[Spring] build.gradle 설정 (0) | 2022.08.18 |
[Spring] API 문서화 (16) | 2022.07.18 |