2014-11-04 157 views
1

我在春天創建了Web應用程序,並處理404和500的異常映射。如果系統沒有找到請求的URL的任何資源,它將重定向到自定義的404.jsp,而不是常規的404頁面。一切正常,直到決定添加web服務在我的app.I已經包括一個更多的控制器作爲web服務沒有這個控制器的視圖,這需要通過curl命令調用。如何發送發送狀態代碼作爲404響應而不是404.jsp作爲html響應在春季?

用戶可能會改變curl腳本。如果他們更改了URL,它應該顯示404狀態碼。但它將自定義404.jsp作爲html響應返回,而不是狀態碼。因爲調度程序servlet會將所有url/*。

我該如何解決這個問題?

請分享您的建議。

+0

請張貼你如何配置你的404自定義頁面 – 2014-11-04 09:01:58

+0

你應該看看這些答案:http://stackoverflow.com/a/26634576/280244 - 它顯示瞭如何有一個其他異常處理程序,具體取決於'接受類型標題 - 我認爲你可以適應這一點,爲您的網絡服務。 – Ralph 2014-11-04 09:25:12

+0

我希望這可以幫助你得到你想要的[https://stackoverflow.com/a/46029597/6941879](https://stackoverflow.com/a/46029597/6941879) – AbdusSalam 2017-09-04 02:42:27

回答

1

春季3.2中引入的@ControllerAdvice,並作爲文檔中提到:

它通常用來定義@ExceptionHandler

,所以你可以使用@ControllerAdvice協助您@Controller

類似如下:

@ControllerAdvice 
class GlobalControllerExceptionHandler { 
    @ResponseStatus(HttpStatus.NOT_FOUND) // 404 
    @ExceptionHandler(Exception.class) 
    public void handleNoTFound() { 
     // Nothing to do 
    } 
} 

請參閱本教程here,並且這個答案here

希望有所幫助。

+0

這很好。 但是這裏的一些urls屬於這個系統的應用程序應該顯示自定義錯誤頁面作爲視圖。 剩餘的網址需要執行web服務,並且應在404發生時返回狀態代碼,而不是將html內容作爲響應 – sridhar 2014-11-04 10:14:48