I can do it(Feat. DEV)

Spring MVC @ControllerAdvice 활용하기 본문

개발자 모드/응용

Spring MVC @ControllerAdvice 활용하기

까짓거 해보자 개발자 2022. 10. 25. 17:42
728x90

다른 프로젝트에서 @ControllerAdvice라는 어노테이션을 발견함.

갓글에 검색해보니 보편적으로 패키지로 범위를 지정하여 전역 컨트롤러를 만듦으로써,

예외 처리를 적용시킬 때 사용하는 것 같음.

 

필자는 예외 처리 말고 또 다른 사용법 중 하나인 @ModelAttribute를 이용하여

다른 컨트롤러에서 뿌려주는 화면 단에서 모델 정보를 사용할 예정임.

 

먼저 ControllderAdvice 클래스를 만들어야 함.

//JPA, Spring Boot 사용
@ControllerAdvice(basePackages = {"com.exam.controller.user"})	//패키지 설정
public class UserControllerAdvice {

    @Autowired
    private BoardRepository boardRepository;	//게시판 repository 의존성 주입

    @ModelAttribute("boardList")	//@ModelAttribute로 게시판 목록을 모델 정보에 등록
    public List<Board> getBoardList(){
        List<Board> boardList = boardRepository.findAll();
        return boardList;
    }

}

필자는 user 패키지 안에 있는 모든 컨트롤러에서 게시판 목록을 사용할 수 있도록 설정함.

 

h2 db board 테이블

 

//메인 컨트롤러
@Controller
public class MainController {

    private final Logger logger = LoggerFactory.getLogger(MainController.class);	//로그 관련

    @GetMapping("/")
    public String main(){
        return "index";
    }
    
}

보시다시피 메인 컨트롤러에는 index 화면으로 리턴해주는 메소드 밖에 없음.

하지만 !

사용자 화면(index.jsp)

이런 식으로 index 화면에서는 게시판이 출력되는 것을 볼 수 있음.

위와 같은 방식으로 다양한 화면에서 model 정보를  사용하고 싶다면,

@ControllerAdvice 클래스를 만들어서 관리하면

더욱 깔끔하고 유지보수도 편해짐!!(필자 주관적 입장)

날씨가 쌀쌀함. 다들 감기조심!!😉👍

 

 

 

📢참조

https://tecoble.techcourse.co.kr/post/2021-05-10-controller_advice_exception_handler/

 

ExceptionHandler 와 ControllerAdvice

@ExceptionHandler @ExceptionHandler 는 @Controller , @RestController 가 적용된 Bean 에서 발생하는 예외를 잡아서 하나의 메서드에서 처리해주는 기능이다. @ExceptionHandler…

tecoble.techcourse.co.kr

https://sun-22.tistory.com/13

 

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

@(Rest)ControllerAdvice 예외 처리, 바인딩 설정, 모델 객체를 모든 컨트롤러 전반에 걸쳐 적용하고 싶은 경우에 사용한다. 예외를 처리하는 @ExceptionHandler와 함께 사용하면 전반에 걸친 예외처리가 가

sun-22.tistory.com

 

728x90