Controller Advice

2024. 10. 9. 17:53Spring Framework/Web on Servlet Stack


@ControllerAdvice는 스프링에서 여러 컨트롤러에 전역적으로 적용할 수 있는 기능을 제공합니다. @ExceptionHandler, @InitBinder, @ModelAttribute 메서드를 특정 컨트롤러가 아닌 모든 컨트롤러에 적용할 수 있도록 합니다. @RestControllerAdvice@ControllerAdvice와 비슷하지만 JSON이나 XML 형식으로 응답을 처리합니다.

주요 특징:

  1. 전역 적용: 모든 컨트롤러에 예외 처리 및 데이터 바인딩을 적용합니다.
  2. 타겟 설정: 특정 패키지나 클래스, 어노테이션을 사용하여 적용 범위를 제한할 수 있습니다.

예시:

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.http.ResponseEntity;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleException(Exception ex) {
        return ResponseEntity.status(500).body("Global error: " + ex.getMessage());
    }
}

코드 설명:

  • @ControllerAdvice: 모든 컨트롤러에서 발생하는 예외를 처리할 수 있게 해줍니다.
  • @ExceptionHandler(Exception.class): 발생한 예외를 처리하고 500 상태 코드와 함께 응답을 반환합니다.

또한, @ControllerAdvice를 사용하면 특정 패키지나 컨트롤러 클래스에만 적용되도록 제한할 수 있습니다.

@ControllerAdvice("com.example.controllers")
public class SpecificExceptionHandler {

    @ExceptionHandler(NullPointerException.class)
    public ResponseEntity<String> handleNullPointerException(NullPointerException ex) {
        return ResponseEntity.status(400).body("Null pointer error: " + ex.getMessage());
    }
}

코드 설명:

  • 이 예시는 "com.example.controllers" 패키지에 있는 컨트롤러들에만 예외 처리기를 적용하는 방식입니다.

<참고> : https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-controller/ann-advice.html

'Spring Framework > Web on Servlet Stack' 카테고리의 다른 글

Declaration  (1) 2024.10.09
@RequestParam  (0) 2024.10.09
Exceptions  (0) 2024.10.09
Validation  (0) 2024.10.09
@InitBinder  (0) 2024.10.09