* 뷰에 예외 맵핑하기
HTTP에러나 클래스예외 발생해도 web.xml에 설정가능
스프링 MVC에서 클래스 예외처리용 뷰를 관리하는 기능 지원
1. HandlerExceptionResolver 이용
- @Configuration 파일에 기술
- implements WebMvcConfigurer 한다
- 렌더링할 뷰이름 반환
2. @ExceptionHandler로 예외맵핑
- 메소드에 지정, 여러타입반환가능(뷰이름, ModelAnnView..)
- 자신을 싼 Controller 안에서만 작동하는 문제
3. @ControllerAdvice를 붙인 범용 예외처리 클래스이용
- ApplicationContext에 존재하는 모든 Controller에 적용가능(범용적인 예외처리)
- 해당 클래스안에 @ExceptionHandler 사용하여 에러에 맞는 여러타입 반환가능
--- 소스 ---------------------------------------------------------------------------------------------------
1. HandlerExceptionResolver 이용
@Configuration
public class ExceptionHandlerConfiguration implements WebMvcConfigurer{
@Override
public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
// TODO Auto-generated method stub
//WebMvcConfigurer.super.configureHandlerExceptionResolvers(resolvers);
resolvers.add(handlerExceptionResolvers());
}
@Bean
public HandlerExceptionResolver handlerExceptionResolvers() {
Properties exceptionMapping = new Properties();
//클래스 ReservationNotAvailable 논리 뷰에 맵핑
exceptionMapping.setProperty(ReservationNotAvailableException.class.getName(), "error/ReservationNotAvailable");
//스프링 mvc에 탑재된 예외 리졸버를 이용하여 애플리케이션컨텍스트에서 발생한 예외 맵핑
SimpleMappingExceptionResolver exceptionResolver = new SimpleMappingExceptionResolver();
exceptionResolver.setExceptionMappings(exceptionMapping);
//exceptionMapping에 맵핑되지 않은 예외 발생시 표시할 기본뷰
exceptionResolver.setDefaultErrorView("error/error");
return exceptionResolver;
}
}
3. @ControllerAdvice를 붙인 범용 예외처리 클래스이용
/**
* Specialization of @Component for classes that declare
* @ExceptionHandler, @InitBinder, or @ModelAttribute methods to be shared
* acrossmultiple @Controller classes.
* **/
@ControllerAdvice
public class ExceptionHandlingAdvice {
@ExceptionHandler(ReservationNotAvailableException2.class)
public String handle(ReservationNotAvailableException2 ex) {
return "error/reservationNotAvailable2";
}
@ExceptionHandler
public String handleDefault(Exception e) {
return "error/error";
}
}
'Spring' 카테고리의 다른 글
[spring] spring legacy 프로젝트 설치하기 1 (0) | 2023.04.27 |
---|