본문 바로가기
프로그래밍/스프링프레임워크

Java Config로 Exception Resolver 설정하기

by pentode 2019. 3. 23.

스프링프레임워크에서 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. 실행결과


실행결과


※ 전체 소스


반응형