스프링프레임워크에서 Exception Resolver는 예외가 발생했을때 특정 에러페이지를 보여주고, 예외에 대해서 원하는 HTTP 응답코드를 지정할 수 있습니다.
이 예제는 "스프링프레임워크 에러페이지 만들기"에서의 xml 설정을 Java 설정으로 다시 구현해본 것입니다. 스프링프레임워크에서의 예외처리에 대한 앞의 글을 참조하세요. 글 하단에 전체 예제소스를 추가해 두었습니다.
1. Exception Resolver 설정 입니다.
웹 컨텍스트(WebContextConfiguration.java) 설정에 추가 했습니다.
/**
* 웹 컨텍스트 설정파일
*/
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"com.tistory.offbyone.web"})
public class WebContextConfiguration implements WebMvcConfigurer {
/**
* Exception Resolver를 설정한다.
*/
@Bean
public SimpleMappingExceptionResolver getExceptionResolver() {
SimpleMappingExceptionResolver smer = new SimpleMappingExceptionResolver();
// 지정되지 않은 예외에 대한 기본 에러페이지 입니다.
smer.setDefaultErrorView("common/error/error");
// 상태코드 맵핑이 없는 예외를 위한 기본 상태값 입니다.
smer.setDefaultStatusCode(200);
// 기본값이 "exception" 입니다. 예외 모돌 속성의 키값입니다. ${exception.message}
smer.setExceptionAttribute("exception");
// 하나 또는 그 이상의 예외를 리졸버에서 제외합니다. 제외된 예외는 web.xml에서 지정된 값이 적용됩니다.
smer.setExcludedExceptions(UncheckException.class);
// 예외 클래스에 대해 에러 페이지를 지정합니다.
Properties mappings = new Properties();
mappings.setProperty("com.tistory.offbyone.exception.DatabaseException", "common/error/databaseError");
mappings.setProperty("com.tistory.offbyone.exception.SecurityException", "common/error/securityError");
mappings.setProperty("com.tistory.offbyone.exception.BusinessException", "common/error/businessError");
mappings.setProperty("com.tistory.offbyone.exception.AjaxException", "common/error/ajaxError");
smer.setExceptionMappings(mappings);
// 에러페이지에 상태코드를 지정합니다.
Properties statusCodes = new Properties();
statusCodes.setProperty("common/error/databaseError", "500");
statusCodes.setProperty("common/error/securityError", "403");
statusCodes.setProperty("common/error/businessError", "200");
statusCodes.setProperty("common/error/ajaxError", "200");
smer.setStatusCodes(statusCodes);
return smer;
}
}
2. 테스트용 샘플 컨트롤러 입니다.
위 설정에서 BusinessException은 businessError.jsp 파일을 보여주고, HTTP 응답코드는 200을 보내도록 설정되어 있습니다. 컨트롤러에서는 테스트를 위해 인위적으로 예외를 발생시킵니다.
/**
* Exception Resolver 테스트
* @return
* @throws Exception
*/
@RequestMapping("/common/testError.do")
public String testError() throws Exception {
boolean flag = true;
if(flag) {
throw new BusinessException("예외를 발생합니다.");
}
return "common/testError";
}
3. 실행결과
※ 전체 소스
'프로그래밍 > 스프링프레임워크' 카테고리의 다른 글
Kotlin을 사용하는 Spring Boot 웹 애플리케이션 (0) | 2019.06.16 |
---|---|
Spring Boot 웹 프로젝트 만들기 (15) | 2019.06.13 |
Java Config로 메세지소스(MessageSource) 설정하기(다국어 지원) (0) | 2019.03.19 |
스프링프레임워크 Java config로 MyBatis 사용하기 (8) | 2019.03.17 |
Maven 웹 프로젝트에 스프링프레임워크 적용하기 (0) | 2019.03.13 |