스프링 웹 MVC-28.전역 컨트롤러:@(Rest)ControllerAdvice


전역 컨트롤러: @(Rest)ControllerAdvice

예외 처리, 바인딩 설정, 모델 객체를 모든 컨트롤러 전반에 걸쳐 적용하고 싶은 경우에 사용한다.

  • @ExceptionHandler
  • @InitBinder
  • @ModelAttributes

적용할 범위를 지정할 수도 있다.

  • 특정 애노테이션을 가지고 있는 컨트롤러에만 적용하기
  • 특정 패키지 이하의 컨트롤러에만 적용하기
  • 특정 클래스 타입에만 적용하기

참고

  • https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-controller-advice
// @RestControllerAdvice // ControllerAdvice 똑같으나 @ResponseBody 붙어있음
// 모든 클래스에 전부 적용
// @ControllerAdvice
// 전부 말고 몇 개의 컨트롤러만 적용할 경우
@ControllerAdvice(assignableTypes = {EventController.class, SampleController.class})
public class BaseController {

    @ExceptionHandler({EventException.class, RuntimeException.class}) // 여러 개의 익셉션 사용 가능
    public String eventErrorHandler(RuntimeException ex, // 상위의 익셉션으로.
                                    Model model,
                                    HandlerMethod method){
        System.out.println(method);
        model.addAttribute("message", "event error");
        return "error";
    }

    @ModelAttribute
    public void categories(Model model){
        model.addAttribute("categories", com.sun.tools.javac.util.List.of("study", "seminar", "hobby"));
    }

    @InitBinder
    public void initEventBinder(WebDataBinder webDataBinder){
        webDataBinder.setDisallowedFields("id");
        webDataBinder.addValidators(new EventValidator());
    }
}





© 2019. by jaeuk