2015-06-07 106 views
0

我想爲錯誤代碼處理創建攔截器,它將在Spring MVC應用程序中重定向到適當的錯誤頁面。問題在於錯誤代碼來自服務,這是在請求處理程序內處理的,所以我可能需要攔截服務而不是請求處理程序。 例如:在java攔截器中重定向

@RequestMapping(value = "/products", method = RequestMethod.GET) 
public ModelAndView handleProducts(ModelAndView mav) { 
     //do something 
     ... 
     //load products 
     ResponseMo response = productsService.getProducts(); 
     //process the response 
     mav.addObject("products", response.getData()); 
     ... 
     /do something else 
     return mav; 
} 

我需要的是趕上)的getProducts的響應(如果有錯誤響應,我需要重定向...在項目中,有很多這樣的處理程序和服務電話,所以我需要在一個地方解決它。 ProductsService是該項目的一部分,同樣的耳朵。 我在想攔截器,過濾器,方面......我可以攔截getProducts()調用,但是我不能在攔截器內部重定向,或者我可以嗎?或者我應該使用一些不同的方法?

+0

您是否應該重定向到任何失敗的服務方法的同一頁面? –

+0

Sotirios:是的,現在根據項目規範,只有一個頁面,所有例外都是一樣的。但是你知道,有可能會有新的請求重定向到不同的頁面... –

回答

1

看到https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc

創建將融入你的商業案例,然後處理控制器例外的自定義異常。希望能幫助到你。

+0

哪裏應該我拋出異常?問題是該服務不會返回一個異常,而是返回一個簡單的錯誤代碼(String)。 所以可能我應該創建攔截器,它會拋出將由@ExceptionHandler處理的異常。聽起來不錯,謝謝.. –

+0

攔截器的目的是完全不同的。你想要捕捉什麼樣的例外?如果它們是未檢查的異常,則它們不能在方法簽名中聲明。所以你可以像前一個鏈接的例子那樣在控制器中處理它們,它們處理可以從它們的服務中引發的@ExceptionHandler({SQLException.class,DataAccessException.class})。 –

+0

問題是沒有從productsService(來自上面的示例)引發的異常,只有錯誤代碼。我不能改變這種行爲。所以我不能使用@ExceptionHandler,因爲沒有例外......我想的是在一些攔截器中創建它們,這可能不是很好的行爲,但我現在看不到任何其他可能的解決方案。 –