2014-09-01 152 views
2

我在Spring引導異常處理中試圖伸出援手。 我已經創建了一個REST應用程序,並且該應用程序適用於所有有效的url。 我想處理無效網址的例外情況。 但如果我嘗試打網址無效的申請,我得到以下異常: -爲Spring Boot 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,一旦我能夠刪除異常。

任何關於如何在Spring 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

得到它爲我用一個簡單的404也許是時候分享整個項目和一些步驟來重現後此鏈接? – 2014-09-02 13:58:43

+0

我有一些工作,但不完全。刪除@EnableWebMvc後,我沒有收到錯誤。我得到了默認的Whitemarker頁面。 – Manu 2014-09-04 11:48:34

+0

你需要打開一下。是否有堆棧跟蹤? – 2014-09-04 21:09:58

回答

1

如果404發生,我已經添加了映射到重定向到自定義html頁面。 PFB爲此所做的更改:

  • 從 WebConfig.java類中刪除了Annotation @EnableWebMvc。這樣做是爲了消除錯誤「響應 已經提交」,嘗試任何無效的網址。
  • 添加以下代碼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); 
         } 
        }; 
    } 
    

非常感謝您的建議答熟知。這非常有用。

我也跟着通過初步exeception

0

你可以按照下面的博客來處理MVC異常處理

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

+0

我無法按照鏈接中的步驟操作,因爲當我嘗試使用未知網址時,出現上述錯誤。 – Manu 2014-09-01 13:44:37

+0

我已經在問題中給出了同樣的鏈接作爲我的參考。如果有關於例外的任何信息,請告訴我。 – Manu 2014-09-01 15:42:57

0

升級到春季啓動1.1.5.RELEASE。

+0

使用最新版本 – Manu 2014-09-01 19:42:32

+0

感謝Dave Syer的建議。使用最新版本的spring boot.I已經從pom.xml添加了spring引導依賴關係。但是沒有運氣......相同錯誤 – Manu 2014-09-02 05:50:14

+1

堆棧跟蹤仍然顯示1.1.4。如果你還沒有更新,你還能更新嗎? – 2014-09-02 06:18:55