programing

자바.java.java잘못된 인수예외:기본 서블릿 처리를 구성하려면 서블릿 컨텍스트가 필요합니다.

mailnote 2023. 7. 30. 18:01
반응형

자바.java.java잘못된 인수예외:기본 서블릿 처리를 구성하려면 서블릿 컨텍스트가 필요합니다.

저는 다음과 같은 시험 수업이 있습니다.

@ActiveProfiles({ "DataTC", "test" })
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {BaseTestConfiguration.class, DataTestConfiguration.class, JpaConfiguration.class, PropertyPlaceholderConfiguration.class })
public class RegularDayToTimeSlotsTest {
...

이 문제는 BaseTestConfiguration 클래스에서 발생한 것 같습니다.

@Configuration
@ComponentScan(basePackages = { "com.bignibou" }, excludeFilters = { @Filter(type = FilterType.CUSTOM, value = RooRegexFilter.class),
        @Filter(type = FilterType.ANNOTATION, value = Controller.class), @Filter(type = FilterType.ANNOTATION, value = ControllerAdvice.class) })
public class BaseTestConfiguration {

}

시스템적으로 다음 예외가 발생합니다.

Caused by: java.lang.IllegalArgumentException: A ServletContext is required to configure default servlet handling
    at org.springframework.util.Assert.notNull(Assert.java:112)
    at org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer.<init>(DefaultServletHandlerConfigurer.java:54)
    at org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.defaultServletHandlerMapping(WebMvcConfigurationSupport.java:329)
    at org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration$$EnhancerByCGLIB$$bb4ceb44.CGLIB$defaultServletHandlerMapping$22(<generated>)
    at org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration$$EnhancerByCGLIB$$bb4ceb44$$FastClassByCGLIB$$368bb5c1.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:326)
    at org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration$$EnhancerByCGLIB$$bb4ceb44.defaultServletHandlerMapping(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:166)
    ... 43 more

저는 이 문제를 어떻게 해결해야 할지 잘 모르겠습니다.Spring이 서블릿 컨텍스트를 찾고 있는데 테스트를 실행하면 위의 예외가 발생합니다.

당신의 한 사람@Configuration클래스에는 분명히 주석이 달렸습니다.@EnableWebMvc그런 식으로DelegatingWebMvcConfiguration에 의해 가져오기 때문에 스택 추적에 도달합니다.@EnableWebMvc.

그래서 당신은 당신이 필요 없다고 생각하지만,WebApplicationContext(따라서ServletContext), 응용프로그램 컨텍스트를 로드하기 때문에 실제로 필요합니다.@EnableWebMvc.

두 가지 옵션이 있습니다.

  • 통합 테스트를 위한 구성 클래스를 구성하여 웹 관련 구성(예:@Configuration주석이 달린 학급@EnableWebMvc).
  • 테스트 클래스에 주석 달기@WebAppConfiguration위의 다른 논평에서 제안된 바와 같이.

안부 전해요,

샘(Spring Test Context Framework의 저자)

당신이 실종된 것 같습니다.

@WebAppConfiguration

당신의 시험 수업으로부터.

문서에는 다음과 같이 기술되어 있습니다.

리소스 기본 경로는 테스트의 웹 응용 프로그램 컨텍스트에 대한 서블릿 컨텍스트 역할을 하는 MockServletContext를 만드는 데 사용됩니다.

일반적으로 서블릿 컨테이너는 다음을 제공합니다.ServletContext당신은 테스트 환경에 있기 때문에 가짜가 필요합니다.@WebAppConfiguration를 제공합니다.

서블릿 컨텍스트를 인스턴스화하려면 주석을 사용해야 합니다.

@WebAppConfiguration

통합 테스트를 위해 로드된 ApplicationContext가 WebApplicationContext여야 함을 선언하는 데 사용되는 클래스 수준 주석입니다.테스트 클래스에 @WebAppConfiguration이 있는 것만으로도 웹 응용 프로그램의 루트 경로(즉, 리소스 기본 경로)에 대한 기본값인 "file:src/main/webapp"을 사용하여 테스트용 웹 응용 프로그램 컨텍스트가 로드됩니다.리소스 기본 경로는 테스트의 웹 응용 프로그램 컨텍스트에 대한 서블릿 컨텍스트 역할을 하는 MockServletContext를 만드는 데 사용됩니다.

비슷한 오류가 발생했지만 테스트를 실행하기보다는 애플리케이션을 정상적으로 실행하는 동안 발생했습니다.

당신이 사용자 정의를 사용하고 있는지 여부가 밝혀졌습니다.PermissionEvaluator의 그면당그별신도합니야다고로 .@Configuration기본 Spring 보안 구성이 있는 클래스로 이동합니다.

참고: Spring Boot 프로젝트에 메서드 기반 보안을 추가하려면 어떻게 해야 합니까?

또한 Github 이슈가 있습니다: https://github.com/spring-projects/spring-boot/issues/4875 .

언급URL : https://stackoverflow.com/questions/21516683/java-lang-illegalargumentexception-a-servletcontext-is-required-to-configure-de

반응형