🐣 @ControllerAdvice란?
- Spring Framework에서 제공하는 기능
- 예외처리,모델 객체 전달,바인딩 설정 등의 전역적으로 사용되는 작업을 할 수 있음
✔️범위 지정 방법
Admin class에만 지정
- @ControllerAdvice(annotations = Admin.class)
특정 패키지에 속한 클래스에 지정(여러개도 가능)
- @ControllerAdvice(basePackages = "com.mycompany.admin")
🐥@ExceptionHandler
전역에서 발생되는 예외를 처리 할 때 사용된다!
범위도 지정이 가능한데,
@ExceptionHandler(SQLException.class) -> SQLException이 발생할 경우만 해당 method 실행
@ExceptionHandler(Exception.class) -> 모든 예외 발생 시 해당 method 실행
아래 메소드의 경우 SQLException이 발생하면 error 페이지로 넘어가게되고,
errorMessage라는 이름으로 해당 메시지가 뷰에 전달된다 .
@ControllerAdvice
public class GlobalController {
@ExceptionHandler(SQLException.class)
ModelAndView globalHandleException(Exception e) {
ModelAndView mv = new ModelAndView("error");
mv.addObject("errorMessage", "DB 에러 발생 : " + e.getMessage());
return mv;
}
}
🐤@InitBinder
데이터의 바인딩 설정을 초기화 할 때 사용된다
⭐바인딩 : 프로그램의 기본 단위가 가질 수 있는 구성 요소의 값을 확정 하는 것 (ex. int a = 1)
아래 method를 이용해서 컨트롤러에 들어오는 모든 date타입 매개변수는 자동으로 "yyyy-mm-dd"의 형식으로 변환된다.
@ControllerAdvice
@InitBinder
public void dateInitBinder(WebDataBinder wb) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
wb.registerCustomEditor(Date.class, new CustomDateEditor(sdf, true));
}
}
🐣 @ModelAttributes
모델 객체를 전역으로 추가 할 때 사용된다
프로젝트를 진행하면서 로그인 여부를 확인 할때 이 방법을 사용하였다 !
아래 method의 경우 모든 컨트롤러 실행전 name 모델에 "유재석"이 추가된다
@ControllerAdvice
public class GlobalController {
@ModelAttribute
public void addGlobalModel(Model model) {
model.addAttribute("name", "유재석");
}
}
'🌱 Spring' 카테고리의 다른 글
스프링(Spring Framework) 버전 별 특징 (1) | 2023.08.05 |
---|---|
2. SpringBoot에서 카카오 로그인 API 적용하기(DB 저장) (0) | 2023.08.01 |
1. SpringBoot에서 카카오 로그인 API 적용하기(DB 저장) (0) | 2023.07.31 |
@DynamicInsert와 @DynamicUpdate (0) | 2023.07.30 |
[Spring Boot] 인터셉터(Interceptor) 란? (0) | 2023.07.26 |