• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

@ControllerAdvice 적용시에 404 에러의 경우

22.05.16 09:59 작성 조회수 482

1

1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
안녕하세요.
강의 내용중에 궁금한게 있어서 질문드립니다.
 
@ControllerAdvice 적용시에 다른 Exception은 잘 적용되는데
URL을 잘 못 입력해서 발생하는 404(NoHandlerFoundException)의 경우에는 처리가 안되어서
구글링을 해서 아래와 같이 적용 처리 하였습니다.
 
이때 @EnableWebMvc를 넣지 않으면 처리가 안 되는데 @EnableWebMvc가 왜 필요한건지
궁금해서 질문 남깁니다.
 
* 저의 가설은
- 스프링부트가 부팅될때 DispatherServlet이 필요한 설정들을 자동구성하는데
이때 자동구성된 설정에서 수동구성 설정이 추가되면서(=> setThrowExceptionIfNoHandlerFound(true))
다시 설정이 적용되어야 하고 그때 @EnableWebMvc가 그 역할을 한다.
 
 
@Configuration
@RequiredArgsConstructor
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
private final AccessInterceptor accessInterceptor;

@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(accessInterceptor)
.order(1)
.addPathPatterns("/**")
.excludePathPatterns("/error");
}

/**
* 적절한 URL을 못 찾으면(Not Found Handler) Exception 으로 던진다.
* + EnableWebMvc
* @return
*/
@Bean
DispatcherServlet dispatcherServlet() {
DispatcherServlet dispatcherServlet = new DispatcherServlet();
dispatcherServlet.setThrowExceptionIfNoHandlerFound(true);

return dispatcherServlet;
}
}

답변 1

답변을 작성해보세요.

0

안녕하세요. 아로나님

이 부분은 저도 정확히 잘 모르겠습니다.

아마도 DispatcherServlet이 스프링 빈에 등록되어 있으면 스프링 부트가 자동 설정을 일부 진행하지 않는 듯 합니다.

정확하게 아시는 분 있으면 답변 부탁드려요.

감사합니다.