SpringMVC 处理异常的4种方式

springmvc处理异常有三种方式: 1.在一个controller中定义一个方法,用@ExceptionHandler注解标注。(优先级最高)

@ExceptionHandler

public ModelAndView handleException(Exception exception){

    ModelAndView mv = new ModelAndView("error/500");

    mv.addObject("ex",exception);

    return mv;

}

@ExceptionHandler

public String handleException(Exception exception){

    return "error/500";

}

2.全局异常设置(下载地址 优先级次之)

<!-- 将Controller抛出的异常转到特定View,异常映射处理器 -->

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">

    <!-- 定义异常处理页面用来获取异常信息的变量名,默认名为exception -->

    <!--<property name="exceptionAttribute" value="ex"></property>-->

    <property name="exceptionMappings">

        <props>

            <prop key="java.lang.Throwable">error/500</prop>

        </props>

    </property>

</bean>

3.自定义异常处理(下载地址 优先级次之)

public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {

    System.out.println("自定义异常处理器");

    logger = LoggerFactory.getLogger(ex.getClass());

    ResponseStatus responseStatus = AnnotationUtils.getAnnotation(ex.getClass(), ResponseStatus.class);

    ModelAndView modelAndView = new ModelAndView("error/500");

    //自定义的异常

    if (responseStatus != null) {

        modelAndView.setViewName("error/" + responseStatus.value().value());

    } else {

        //其他异常,做一些其他的处理,如发送错误报警邮件,记录日志

        logger.error(ex.getMessage(), ex);

    }

    return modelAndView;

}

4.自定义一个异常类,继承RunTimeException(优先级最低)

@ResponseStatus(value = HttpStatus.NOT_FOUND,reason = "No such resource")

public class NotFoundException extends RuntimeException {

}

当抛出我们自定义的异常时,就会构造出相应的状态码,一般我们还是设置SimpleMappingExceptionResolver,来进行统一跳转到错误页面。
最佳实践:还是用全局的SimpleMappingExceptionResolver最好,在jsp里面写日志,当需要进行细粒度的控制时,还是自定义异常解析器为好,其他的自我感觉不好用!如有不正确的,欢迎指正! ?

时间: 2024-10-24 05:33:10

SpringMVC 处理异常的4种方式的相关文章

SpringMVC处理异常的三种方式

使用 @ ExceptionHandler 注解 实现 HandlerExceptionResolver 接口 使用 @controlleradvice 注解 1. 使用 @ ExceptionHandler 注解 使用该注解有一个不好的地方就是:进行异常处理的方法必须与出错的方法在同一个Controller里面,可以看到,这种方式最大的缺陷就是不能全局控制异常.每个类都要写一遍. @Controller public class UserController { /** * 模拟 NullPo

Spring MVC处理异常的4种方式

http://blog.csdn.net/ufo2910628/article/details/40399539 http://my.oschina.net/CandyDesire/blog/333340 Spring MVC处理异常有3种方式: (1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver: (2)实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器: (3)使用@Excepti

(01)Spring MVC之处理异常的两种方式及优先级

项目开发中异常需要统一处理,总的来说有两种方式,一种是实现HandlerExceptionResolver接口,一种是使用@ExceptionHandler注解的方式.其中Spring已经为我们提供了一个实现了HandlerExceptionResolver接口的类SimpleMappingExceptionResolver,有人把它单独列为一种方式,不过我认为方式越少越好,哈哈哈哈哈,下面记录一下Spring MVC处理异常的这两种方式. 1.实现HandlerExceptionResolve

【springmvc】传值的几种方式&amp;&amp;postman接口测试

最近在用postman测试postman接口,对于springmvc传值这一块,测试了几种常用方式,总结一下.对于postman这个工具的使用也增加了了解.postman测试很棒,有了工具,测试接口,事倍功半. 一.单个参数传递 [email protected]注解 [java] view plain copy print? <span style="font-family:'KaiTi_GB2312';font-size:18px;">   /** * 测试单个参数@R

springMVC --全局异常处理(两种方式)

首先看springMVC的配置文件: <!-- 全局异常配置 start --> <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <pro

springMVC记录系统日志的几种方式

在项目开发中往往需要记录一些用户操作的系统日志到数据库,而不仅仅是记录在文件中或者log4j上.     第一种是最简单最原始也是最繁琐最笨的办法:即每个需要记录的操作入口方法中去调用新增日志的接口. 第二种是采用spring的拦截器进行方法拦截:     建立一个拦截器:       <mvc:interceptor>            <mvc:mapping path="/**"/>           <bean class="com

Spring MVC处理异常有3种方式:

SpringMVC通过HandlerExceptionResolver接口处理异常,主要包括4个实现类: DefaultHandlerExceptionResolver AnnotationMethodHandlerExceptionResolver SimpleMappingExceptionResolver ResponseStatusExceptionResolver (1).默认装配DefaultHandlerException,在web.xml配置响应状态码和对应的页面 <error-

SpringMVC实现操作的第二种方式

一: 运行效果: 点击提交之后显示效果 二: (1).web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi

SpringMVC数据类型转换的两种方式

1. 自定义类型转换器实现Converter<S,T>接口并加入到SpringMVC的IOC容器中 2.配置自定义转换器到FormattingConversionServiceFactoryBean工厂中! 注意ID好像只能为conversionService 这样通过请求到达目标Handler之前对请求参数进行字符串修改,将Handler入参格式的数据返回,实现转换器的作用 2.相同的原理,用filter拦截请求 自定义filter实现Filter接口:在web.xml里注册filter:用