예외 처리, 바인딩 설정, 모델 객체를 모든 컨트롤러 전반에 걸쳐 적용하고 싶은 경우에 사용한다.
적용할 범위를 지정할 수도 있다. (ControllerAdvice.java 참고)
@ControllerAdvice
public class BaseController {
@ExceptionHandler({EventException.class, RuntimeException.class})
public String eventErrorHandler(RuntimeException exception, Model model){
model.addAttribute("message", "runtime error");
return "error";
}
@InitBinder("event")
public void initEventBinder(WebDataBinder webDataBinder){
webDataBinder.setDisallowedFields("id");
webDataBinder.addValidators(new EventValidator());
}
@ModelAttribute
public void categories(Model model){
model.addAttribute("categories", List.of("study", "seminar", "hobby", "social"));
}
}
특정 컨트롤러에만 적용하고 싶은 경우
@ControllerAdvice(assignableTypes = {EventController.class, EventApi.class})
public class BaseController {
@ExceptionHandler({EventException.class, RuntimeException.class})
public String eventErrorHandler(RuntimeException exception, Model model){
model.addAttribute("message", "runtime error");
return "error";
}
@InitBinder("event")
public void initEventBinder(WebDataBinder webDataBinder){
webDataBinder.setDisallowedFields("id");
webDataBinder.addValidators(new EventValidator());
}
@ModelAttribute
public void categories(Model model){
model.addAttribute("categories", List.of("study", "seminar", "hobby", "social"));
}
}
시간 관계 상 살펴보지 못한 내용
참고