본문 바로가기
Spring

[Spring] 뷰에 예외 맵핑하기

by 평범한kiki 2023. 6. 11.

* 뷰에 예외 맵핑하기

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