관리 메뉴

개발하는 동그리

@RestControllerAdvice & @ControllerAdvice 본문

IT 정보/Spring

@RestControllerAdvice & @ControllerAdvice

개발하는 동그리 2024. 12. 12. 17:10
반응형

@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' 카테고리의 다른 글

OSI 7계층 / CIA / RSA / RFC 규칙 / JWT  (4) 2022.08.29
[Test] Slice Test (Data Access 계층)  (2) 2022.08.18
[Test] Slice Test (API 계층)  (2) 2022.08.18
[Spring] application.yml 설정  (1) 2022.08.18
[Spring] build.gradle 설정  (0) 2022.08.18