[英]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.