2014-09-01 2 views
2

스프링 부트 예외 처리에서 손을 꼽았습니다. REST 애플리케이션을 만들었으며 애플리케이션은 모든 유효한 URL에 대해 작동합니다. 잘못된 URL에 대한 예외를 처리하려고합니다. 하지만 난이 잘못된 URL을 사용하여 응용 프로그램을 타격하려고하면, 내가 아래 예외를 얻고있다 : - 부팅을 봄에 새가되는스프링 부트 REST 애플리케이션의 404 오류 처리 중에 오류가 발생했습니다.

13:04:02.940 [http-bio-8081-exec-3] INFO o.s.web.servlet.DispatcherServlet - FrameworkServlet 'dispatcherServlet': initialization completed in 44 ms 
13:04:03.177 [http-bio-8081-exec-3] ERROR o.s.boot.context.web.ErrorPageFilter - Cannot forward to error page for/sample/processgetMessage5 (response is committed), so this response may have the wrong status code 
java.lang.IllegalStateException: Cannot forward after response has been committed 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:348) ~[catalina.jar:7.0.55] 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338) ~[catalina.jar:7.0.55] 
    at org.springframework.boot.context.web.ErrorPageFilter.handleErrorStatus(ErrorPageFilter.java:123) [spring-boot-1.1.4.RELEASE.jar:1.1.4.RELEASE] 
    at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:104) [spring-boot-1.1.4.RELEASE.jar:1.1.4.RELEASE] 
    at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:89) [spring-boot-1.1.4.RELEASE.jar:1.1.4.RELEASE] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.55] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.55] 

나는 이유를 알아낼 수 없습니다입니다. 어떤 조언이나 제안이 도움이 될 것입니다.

이 사이트에서 언급 된 옵션을 시도해보고 싶다면 enter link description here 예외를 제거 할 수 있습니다.

스프링 4에서 주석을 사용하여 404를 처리하는 방법에 대한 지침은 매우 유용 할 것입니다.

아래 코드를 시도 : -

@Configuration 
@EnableWebMvc 
@EnableSwagger 
public class WebConfig extends WebMvcConfigurerAdapter { 
....... 

    @Bean 
      public EmbeddedServletContainerCustomizer containerCustomizer() { 

       return new EmbeddedServletContainerCustomizer() { 
       @Override 
       public void customize(ConfigurableEmbeddedServletContainer container) { 

        ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/401.html"); 
        ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/401.html"); 
        ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/401.html"); 

        container.addErrorPages(error401Page, error404Page, error500Page); 
       } 
      }; 
     } 

의 pom.xml에서 종속성을 추가

<dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-actuator</artifactId> 
      <version>1.1.5.RELEASE</version>    
      <exclusions> 
       <exclusion> 
        <artifactId>commons-logging</artifactId> 
        <groupId>commons-logging</groupId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
      <version>1.1.5.RELEASE</version>    
      <exclusions> 
       <exclusion> 
        <artifactId>commons-logging</artifactId> 
        <groupId>commons-logging</groupId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
      <version>1.1.5.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <version>1.1.5.RELEASE</version> 
      <scope>test</scope> 
     </dependency> 

PFB 업데이트 된 스택 추적 : -

22:09:03.210 [http-bio-8081-exec-3] INFO o.s.web.servlet.DispatcherServlet - FrameworkServlet 'dispatcherServlet': initialization completed in 28 ms 
22:09:03.413 [http-bio-8081-exec-3] ERROR o.s.boot.context.web.ErrorPageFilter - Cannot forward to error page for/applicationurl/processMessage11 (response is committed), so this response may have the wrong status code 
java.lang.IllegalStateException: Cannot forward after response has been committed 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:348) ~[catalina.jar:7.0.55] 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338) ~[catalina.jar:7.0.55] 
    at org.springframework.boot.context.web.ErrorPageFilter.handleErrorStatus(ErrorPageFilter.java:134) [spring-boot-1.1.5.RELEASE.jar:1.1.5.RELEASE] 
    at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:111) [spring-boot-1.1.5.RELEASE.jar:1.1.5.RELEASE] 
    at org.springframework.boot.context.web.ErrorPageFilter.access$000(ErrorPageFilter.java:58) [spring-boot-1.1.5.RELEASE.jar:1.1.5.RELEASE] 
    at org.springframework.boot.context.web.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:87) [spring-boot-1.1.5.RELEASE.jar:1.1.5.RELEASE] 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.0.6.RELEASE.jar:4.0.6.RELEASE] 
    at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:100) [spring-boot-1.1.5.RELEASE.jar:1.1.5.RELEASE] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.55] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.55] 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) [catalina.jar:7.0.55] 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) [catalina.jar:7.0.55] 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) [catalina.jar:7.0.55 

]

응용 프로그램 이온 유효한 URL 매핑을 위해 잘 작동합니다. 그것은 봄 부팅을 사용하여 빌드됩니다. PFB 응용 프로그램 주석 클래스 : -

@EnableJpaRepositories 
    @EnableAutoConfiguration 
    public class AppConfig { 


     public static void main(String[] args) { 
      SpringApplication.run(AppConfig .class, args); 
     } 



@Configuration 
@EnableWebMvc 
public class WebApplicationConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void configureMessageConverters(
      List<HttpMessageConverter<?>> converters) { 
     MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); 

     converters.add(mappingJackson2HttpMessageConverter); 
     converters.add(new StringHttpMessageConverter()); 

     super.configureMessageConverters(converters); 
    } 

public class WebApplicationXML extends SpringBootServletInitializer { 
    @Override 
    protected SpringApplicationBuilder configure(
      SpringApplicationBuilder application) { 
     return application.sources(Application.class); 
    } 

} 
+0

을 통해 점점 후이 링크를 따라? –

+0

나는 완전하게는 아니지만 일할 무언가를 얻었습니다. @EnableWebMvc를 제거한 후에 오류가 표시되지 않습니다. 나는 Whitemarker 디폴트 페이지로 forwared를 얻고있다. – Manu

+0

조금 열어야합니다. 스택 트레이스가 있습니까? –

답변

1

404가 발생하면 사용자 지정 html 페이지로 리디렉션 할 매핑을 추가했습니다. PFB이에 대해 수행 변경 :

  • WebConfig.java 클래스에서 주석 @EnableWebMvc을 제거. 유효하지 않은 URL을 시도 할 때 "응답 이미 커밋 됨"이라는 오류를 제거하기 위해 수행됩니다.
  • 는 WebConfig.java 클래스와 망령의 HTML 페이지에 아래 코드를 추가합니다 :

    @Bean 
    public EmbeddedServletContainerCustomizer containerCustomizer() { 
    
        return new EmbeddedServletContainerCustomizer() { 
         @Override 
         public void customize(ConfigurableEmbeddedServletContainer container) { 
    
          ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, 
            "/401.html"); 
          ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, 
            "/404.html"); 
          ErrorPage error500Page = new ErrorPage(
            HttpStatus.INTERNAL_SERVER_ERROR, "/500.html"); 
          ErrorPage error505Page = new ErrorPage(
            HttpStatus.HTTP_VERSION_NOT_SUPPORTED, "/505.html"); 
          ErrorPage error506Page = new ErrorPage(
            HttpStatus.METHOD_NOT_ALLOWED, "/405.html"); 
          container.addErrorPages(error401Page, error404Page, 
            error500Page, error505Page, error506Page); 
         } 
        }; 
    } 
    

덕분에 제안 ANS 형 간염에 대한 많은. 그것은 매우 유용했습니다.

나는 그것은 나를 위해 작동 어쩌면 그것은 전체 프로젝트 및 재현하는 몇 가지 단계를 공유하는 시간이다 간단한 (404)와 초기 예외에

0

당신은 아래 블로그가 봄 부팅 1.1.5.RELEASE에

http://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc

+0

알 수없는 URL을 시도 할 때 위에서 언급 한 오류가 발생하므로 링크의 단계를 수행 할 수 없습니다. – Manu

+0

나는 그 자체로 내 참조와 같은 링크를 주었다. 예외에 대한 정보가 있으면 알려주십시오. – Manu

0

업그레이드를 처리 MVC 예외를 처리하기 위해 수행 할 수 있습니다.

+0

최신 버전 사용 – Manu

+0

Dave Syer에게 감사의 말을 전합니다. 최신 버전의 스프링 부트 사용. pom.xml.But에서 스프링 부트 의존성을 추가했습니다 ... 같은 오류 – Manu

+1

스택 추적은 여전히 ​​1.1.4를 말합니다. 아직 업데이트하지 않았다면 업데이트 할 수 있습니까? –

관련 문제