springframework

JavaConfig 에 대한 WAS Exception Handling

Jungsoomin :) 2020. 8. 9. 20:36

자바 설정으로 한번 시험을 해보았다. throwExceptionIfNoHandlerFound 이 먹는지에 대하여서 그렇다.

 

public class WebXmlConfig extends AbstractAnnotationConfigDispatcherServletInitializer{
	
	
	@Override
	protected Class<?>[] getRootConfigClasses() {
		return new Class[]{RootConfig.class};
		
	}

	@Override
	protected Class<?>[] getServletConfigClasses() {
		return new Class[] {WebMvcConfig.class};
	}

	@Override
	protected String[] getServletMappings() {
		return new String[] {"/"};
	}
	
	@Override//web.xml 설정 변경 메서드
	protected void customizeRegistration(Dynamic registration) {
		//InitParam 추가
		registration.setInitParameter("throwExceptionIfNoHandlerFound", "true");
	}

}

AbstractAnnotationConfigDispatcherInitializer 상속 클래스는 web.xml을 대신한다는 것을 기억한다.

 

여기서 재정의한 메서드 중 cutomizeRegistration 메서드는 디스페쳐 서블릿 설정 객체를 매개 값으로 갖는데,

 

setInitParameter(키, 값) 메서드로 키와 값을 web.xml 에 주던대로 주면 되겠다.

 


@ControllerAdvice에서 익셉션을 잘 캐치하는 것을 확인했다. 

@ControllerAdvice
@Log4j
public class CommonExceptionAdvice {
	
	
	@ExceptionHandler(NoHandlerFoundException.class)
	public String hadle404(NoHandlerFoundException ex, Model model) {
		log.error("Exception : "+ex.getMessage());
		return "exception/handle404";
	}
}

DefaultServletHandler 설정을 @EnableWebMvc 가 사용하는 WebMvcConfigurer 구현객체 에서 configureDefaultServletHandling 메서드를 재정의 하여 실험을 해보기로 했다. 정말 WAS 의 DefaultServlet 문제인가, 싶어서..

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"com.soomin.controller","com.soomin.exception"})
public class WebMvcConfig implements WebMvcConfigurer{
	@Override
	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
		configurer.enable();
	}
    ...
    
}

 

 

역시나 catch 되던 NoHandlerFoundException이 잡히지 않기 시작한다. ..이유는 확실히 알아서 답답한 마음이 가신다..😂😂