스프링 웹 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());
}
}