2017-06-15 49 views
0

我想爲zuul服務器創建標準錯誤頁面,以便我可以將異常重定向到此頁面?爲zuul創建站點錯誤頁面[version 1.1.2]

目前,我創建了一個zuul過濾器捕捉如下zuul例外:

代碼片段

@Override 
    public Object run() { 
     try { 
      RequestContext ctx = RequestContext.getCurrentContext(); 
      Object e = ctx.get("error.exception"); 

      if (e != null && e instanceof ZuulException) { 
       ZuulException zuulException = (ZuulException)e; 
       LOG.error("Zuul failure detected: " + zuulException.getMessage(), zuulException); 

       // Remove error code to prevent further error handling in follow up filters 
       ctx.remove("error.status_code"); 

       // Populate context with new response values 
       ctx.setResponseBody("Internal Server Error : Please contact Phoenix Admin"); 
       ctx.getResponse().setContentType("application/json"); 
       ctx.setResponseStatusCode(500); //Can set any error code as excepted 
      } 
     } 
     catch (Exception ex) { 
      LOG.error("Exception filtering in custom error filter", ex); 
      ReflectionUtils.rethrowRuntimeException(ex); 
     } 
     return null; 
    } 

欣賞的任何建議?

+0

將內容類型更改爲text/html應該拋出一個頁面而不是json。那是你在找什麼?或者你想扔一個實際的頁面。 –

+0

我期待的內容應該從錯誤頁面讀取,而不是硬編碼直接進入響應正文,我選擇的一個選項是編寫一段代碼從文件讀取內容並填充到responseBody中,但我相信會有點擊它@GrinishNepal更好的方法 – Joey

回答

0

我將不得不花費一些時間來了解如何從我正在旅行的錯誤頁面中讀取。但通過閱讀內容來設置響應主體可能不是一個壞的選擇,但肯定可能並不完美。 簽出下面的代碼,如果有幫助。

此外還添加一些代碼,您可能會嘗試,並沒有工作更容易回答和幫助。 您需要確保過濾器在預過濾器之後運行。

@Override 
     public Object run() { 
      RequestContext ctx = RequestContext.getCurrentContext(); 
      HttpServletRequest request = ctx.getRequest(); 

     String url = UriComponentsBuilder.fromHttpUrl("http://localhost:8082").path("/outage").build() 
            .toUriString(); 
     ctx.set("requestURI", url); 
     return null; 
    } 

檢查了這一點的詳細資料: - https://github.com/spring-cloud/spring-cloud-netflix/issues/1754

希望這有助於你。

相關問題