java - SimpleMappingExceptionResolver 中的 Spring doResolveException 未被调用

标签 java spring spring-mvc

package com.beebunny.springapp.exception.resolvers;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;

public class MyExceptionResolver extends SimpleMappingExceptionResolver {

    private static final String ERROR_PAGE = "path/to/error/page.html";

    @Override
    protected ModelAndView doResolveException(HttpServletRequest request,
            HttpServletResponse response,
            Object handler,
            Exception ex) {
        ModelAndView mav = new ModelAndView(ERROR_PAGE);
        return mav;
    }
}

我有一个 Controller ,我编写它只是为了抛出异常。我期望上面的类能够触发其 doResolveException 。我需要在这里做一些事情,例如日志记录、调用 API 和一些其他自定义处理。

不幸的是,我正在使用的 Spring 版本不支持 @ControllerAdvice,因此我又回到了 SimpleMappingExceptionResolver。

我的要求是,我需要一个异常处理程序,如果由于任何原因发生问题,该处理程序将捕获任何未捕获的异常。

不确定导致此功能不起作用的常见原因是什么。

我确实在我的 bean 配置中定义了 context:component-scan,其中包含上面的异常处理程序实现的包。

编辑:这是我的 bean 配置中的相关行:

<context:component-scan base-package="com.beebunny.springapp"/>

最佳答案

解决方案有两个。

  1. 我需要将 @Component 注释添加到 MyExceptionResolver 类中,该类扩展了 SimpleMappingExceptionResolver。感谢 Bohuslav Burghardt 在评论中指出了这一点。
  2. 在我的 beanconfig 中,我依靠 context:component-scan 来获取我的 @Component 注解类并正常工作。

相反,我必须向 MyExceptionResolver 添加一个属性,并在 Spring 配置中显式指定此 bean。因此,我向 MyExceptionResolver 添加了此属性。

private int order;

然后,正如我所说,我必须显式定义此 bean,并且必须手动指定此 order 属性的值,如下所示:

<bean id="exceptionResolver" class="com.beebunny.springapp.exception.resolvers.MyExceptionResolver">
    <property name="order" value="0"/>
</bean>

换句话说,我的项目有一个默认的异常解析器,我只需要覆盖异常解析器的使用顺序。

关于java - SimpleMappingExceptionResolver 中的 Spring doResolveException 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33976552/

相关文章:

java - Spring XML 等效于 @EnableAsync

java - Thymeleaf 、 JQuery 和消息属性

java - PowerMockRule 与 EasyMock 一起 NOT Moquito

java - 传递 TimeUnits 并转换为毫秒

Java:监听列表中的值是否发生变化

java - moshi 序列化支持,如 @jsonunwrapped

java - 无法处理配置类的导入候选

java - 将属性添加到属性占位符

Java 类设计 - 最佳方法的建议。类扩展抽象类并实现接口(interface)

java - BigDecimal 中的 Spring MVC Controller NumberFormat 注释模式问题