2014-01-27 27 views
4

我想在春天基於portlet UI應用異常處理,異常在JSR286的portlet處理

我一直在使用@ControllerAdvice使用彈簧globalexception handling

它在基於servlet的應用程序中工作正常,但它不適用於portlet應用程序。我注意到spring容器沒有在portlet中處理@ControllerAdvice。我試圖在互聯網上搜索同一個問題,但沒有運氣。

是否有任何其他方式來處理Portlet應用程序中的異常?

在此先感謝。

+1

我也面臨同樣的問題。基於Spring的Portlet,試過@ControllerAdvice,它不起作用。 –

回答

3

在Spring中的Portlet支持正在迅速下降,只有很少的代碼或文檔。您會注意到DispatcherPortlet會自動註冊AnnotationMethodHandlerExceptionResolver的實例,而不是更新的ExceptionHandlerExceptionResolver

即使你手動定義在portlet.xml文件後者的情況下,它不會被DispatcherPortlet拾起,因爲它專門查找了org.springframework.web.portlet.HandlerExceptionResolver,這是一個不同的層次比org.springframework.web.servlet.HandlerExceptionResolver的實施者(其中ExceptionHandlerExceptionResolver是後代)。

0

我遇到了同樣的問題,我發現沒有其他解決方案比使用繼承。我編寫了一個名爲PortletControllerAdvice的類(類似於如果您用@ControllerAdvice註解類時將執行的操作),然後使所有類都從中繼承。

public abstract class PortletControllerAdvice { 

    @ExceptionHandler({ NotAuthorizedException.class, WebApplicationException.class }) 
    public ModelAndView handleRESTException(WebApplicationException ex, ResourceResponse response) { 
     // Do stuff 
    } 
} 

然後我的控制器:

@Controller 
public class ViewController extends PortletControllerAdvice { 

} 

這可能不是最好的解決方案,因爲它不是真正的繼承,我認爲一個很好的例子,但它似乎工作。