[英]Configuring exception handling in spring
我在java webapp中使用extdirectspring和spring。
我最近一直在嘗試基本上按照本教程設置異常處理。
我有一些上下文文件。 但是在將以下設置添加到我的模塊(其中包含異常處理程序)后
一個叫做服務器上下文的樣子是這樣的
<context:component-scan base-package="blah.eventsModule" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/errorPages/</value>
</property>
</bean>
<mvc:annotation-driven />
這是我在其中添加異常處理內容的內容
它應該接這個課程:
@Component
public class ErrorReporter
{
@Autowired
private MyConfig _config;
@ExceptionHandler(Throwable.class)
public ModelAndView ShowErrorPage(Exception exception)
{
if (_config.debug())
return new ModelAndView("ShowStackTrace.jsp", "exception", exception);
return new ModelAndView("Whoops.jsp");
}
}
最初,我省略了<mvc:annotation-driven />
來查看是否有必要。 沒有找到ShowErrorPage中的斷點,因此我將其放回去。現在,我得到以下錯誤:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'routerController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter ch.ralscha.extdirectspring.controller.RouterController.handlerAdapter; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter] is defined: expected single matching bean but found 2:
這是在extdirectspring(第三方庫)中發生的。
我沒有顯式創建RequestMappingHandlerAdapter
但是顯然現在我有兩個。 我不在乎extdirect試圖做什么。 因此,如果有一種方法可以確定我在做什么,那將是很好的。
我能想到的唯一一件事是春天不喜歡有多個
<mvc:annotation-driven />
在項目中聲明。
以下是一些看起來可疑的代碼:
public class LoggingHandlerExceptionResolver implements HandlerExceptionResolver, Ordered
{
private final static Logger logger = LoggerFactory.getLogger(LoggingHandlerExceptionResolver.class);
@Autowired
private ErrorLogService errorLogService;
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object o, Exception e) {
...
// Returning null allows other HandlerExceptionResolvers to be called (e.g. to show an error page)
return null;
}
那里的評論不是我的,我也不知道它是否正確,但看起來像是在同一個球場上,並建議將這些事情中的多個都可以。
該課程在我們的“核心”模塊中
就像這個xml片段一樣:
<!-- Spring MVC configuration -->
<mvc:annotation-driven conversion-service="conversionService">
<mvc:argument-resolvers>
<!-- Resolve Spring Data pageable arguments -->
<bean class="org.springframework.data.web.PageableArgumentResolver" />
</mvc:argument-resolvers>
<mvc:message-converters>
<!-- Wire the custom object mapper into Spring MVC -->
<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper" ref="objectMapper" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
這似乎與我的工作無關,但這是mvc:注釋驅動的項目中唯一出現的其他地方。
任何人都可以對發生的事情有所了解嗎?
我想將兩種單獨的錯誤處理方法分開-我要添加的新方法用於項目的新部分-我們有2種部署-一種已經徹底破壞,並且依賴於抑制錯誤的幾個不同組件。 在新版本中,我們不會在地毯下推開例外。 這是我最近問的另一個問題的跟進,該問題是有關在Webapp中獲取明智的異常處理的 。
我們有2個單獨的應用程序上下文,而不穩定的應用程序在頂部不包含新文件。 他們都使用核心模塊。
更新資料
如果我將注釋驅動的代碼片段從核心模塊中刪除,那么我將不再遇到自動裝配的問題,但是仍然無法運行新的異常處理。
好像一旦我弄清楚了如何使它工作,那么問題將是如何合並2個mvc配置?
春季問題的典型解決方案:我不了解發生了什么,但是在復制其他內容后,我不了解我現在有一些有效的功能!
我不太確定我何時停止成為程序員,而是成為擺弄配置文件的人。 這是一個逐漸的死亡!
我更改了錯誤處理程序,以遵循其他工作方式的樣式。
我現在將其定義為應用程序上下文中的bean
<bean class="blah.LoggingHandlerExceptionResolver"/>
<bean class="blah.ErrorReporter"/>
它看起來像這樣:
public class ErrorReporter implements HandlerExceptionResolver, Ordered
{
@Autowired
private MyConfig _config;
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception exception)
{
if (_config.debug())
return new ModelAndView("ShowStackTrace.jsp", "exception", exception);
return new ModelAndView("Whoops.jsp");
}
@Override
public int getOrder()
{
return 0;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.