SpringMVC利用注解实现异常处理
2017-02-22 12:08
344 查看
在项目中如何处理出现的异常,以前通常的作法是继承Exception或实现Runnable接口来封装自定义异常,然后在项目代码中通过try...catch语句块来捕获到出现的异常,封装到我们自己定义的异常类中。如果项目中使用的SpringMVC框架的话,这里介绍另外一种也比较方便的异常处理方法,本人还是比较喜欢这种处理方式。这里用到的是ExceptionHandler这个注解。
1、首先新建一个名为BaseController的抽象类;
public abstract class BaseController
{
[align=left] @ExceptionHandler[/align]
public String
exception(HttpServletRequest request, Exception e)
{
[align=left] // 根据不同的异常类型进行不同处理[/align]
if(e instanceof SQLException)
{
[align=left] String s = "数据库异常" ;[/align]
[align=left] request.setAttribute( "exceptionMessage", s);[/align]
return "error";
[align=left] }else if(e instanceof IOException){[/align]
[align=left] String s = "IO异常";[/align]
[align=left] request.setAttribute( "exceptionMessage", s);[/align]
return "error";
[align=left] }[/align]
[align=left] else return "error"; [/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left] 该方法需要定义在Controller内部,然后创建一个方法并用@ExceptionHandler注解来修饰用来处理异常,这个方法基本和 @RequestMapping修饰的方法差不多,只是可以多一个类型为Exception的参数,@ExceptionHandler中可以添加一个或多个异常的类型,如果为空的话则认为可以触发所有的异常类型错误,返回值为视图名。 [/align]
[align=left]2、以后让每个controller类继承定义的BaseController即可;[/align]
[align=left]
[/align]
[align=left]@Controller[/align]
[align=left]@RequestMapping(value="/login" )[/align]
[align=left]public class LoginController extends BaseController{[/align]
private Logger logger =
Logger.getLogger(LoginController.class);
[align=left] private JsonGenerator jsonGenerator = null;[/align]
[align=left] @Autowired[/align]
[align=left] IUserService userService;[/align]
[align=left] @RequestMapping(value= "/login")[/align]
public String
login() throws Exception{
[align=left] logger.info( "login....");[/align]
[align=left] //这里模拟抛出一个SQL异常信息[/align]
[align=left] throw new SQLException();[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left]3、最后定义一个error.jsp页面[/align]
<%@ page language ="java" contentType="text/html;
charset=utf-8"
[align=left] pageEncoding="utf-8"%>[/align]
[align=left] <%@taglib prefix ="c" uri="http://java.sun.com/jsp/jstl/core" %>[/align]
[align=left]<html>[/align]
[align=left] <body >[/align]
[align=left] ${exceptionMessage}[/align]
[align=left] </body >[/align]
[align=left]</html>[/align]
[align=left]运行效果:[/align]
[align=left][/align]
[align=left]当然如果习惯用配置文件的伙伴,也可以通过Spring配置文件来实现。[/align]
[align=left]
[/align]
[align=left]
[/align]
1、首先新建一个名为BaseController的抽象类;
public abstract class BaseController
{
[align=left] @ExceptionHandler[/align]
public String
exception(HttpServletRequest request, Exception e)
{
[align=left] // 根据不同的异常类型进行不同处理[/align]
if(e instanceof SQLException)
{
[align=left] String s = "数据库异常" ;[/align]
[align=left] request.setAttribute( "exceptionMessage", s);[/align]
return "error";
[align=left] }else if(e instanceof IOException){[/align]
[align=left] String s = "IO异常";[/align]
[align=left] request.setAttribute( "exceptionMessage", s);[/align]
return "error";
[align=left] }[/align]
[align=left] else return "error"; [/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left] 该方法需要定义在Controller内部,然后创建一个方法并用@ExceptionHandler注解来修饰用来处理异常,这个方法基本和 @RequestMapping修饰的方法差不多,只是可以多一个类型为Exception的参数,@ExceptionHandler中可以添加一个或多个异常的类型,如果为空的话则认为可以触发所有的异常类型错误,返回值为视图名。 [/align]
[align=left]2、以后让每个controller类继承定义的BaseController即可;[/align]
[align=left]
[/align]
[align=left]@Controller[/align]
[align=left]@RequestMapping(value="/login" )[/align]
[align=left]public class LoginController extends BaseController{[/align]
private Logger logger =
Logger.getLogger(LoginController.class);
[align=left] private JsonGenerator jsonGenerator = null;[/align]
[align=left] @Autowired[/align]
[align=left] IUserService userService;[/align]
[align=left] @RequestMapping(value= "/login")[/align]
public String
login() throws Exception{
[align=left] logger.info( "login....");[/align]
[align=left] //这里模拟抛出一个SQL异常信息[/align]
[align=left] throw new SQLException();[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left]3、最后定义一个error.jsp页面[/align]
<%@ page language ="java" contentType="text/html;
charset=utf-8"
[align=left] pageEncoding="utf-8"%>[/align]
[align=left] <%@taglib prefix ="c" uri="http://java.sun.com/jsp/jstl/core" %>[/align]
[align=left]<html>[/align]
[align=left] <body >[/align]
[align=left] ${exceptionMessage}[/align]
[align=left] </body >[/align]
[align=left]</html>[/align]
[align=left]运行效果:[/align]
[align=left][/align]
[align=left]当然如果习惯用配置文件的伙伴,也可以通过Spring配置文件来实现。[/align]
[align=left]
[/align]
[align=left]
[/align]
相关文章推荐
- SpringMVC利用注解实现异常处理
- Spring中的@ControllerAdvice注解配合@ExceptionHandler使用实现异常处理
- SpringMVC利用AOP实现自定义注解记录日志
- 【Spring】5、利用自定义注解在SpringMVC中实现自定义权限检查
- SpringMVC利用AOP实现自定义注解记录日志
- C语言利用setjmp和longjmp实现异常处理
- springMVC实现全局异常处理
- SpringMVC利用AOP实现自定义注解记录日志
- SpringMVC实现全局异常捕获处理
- 如何在SpringMVC框架中利用Java反射机制和Javassist实现Java对象、属性、注解的动态创建生成
- 利用HandlerExceptionResolver对SpringMVC进行统一异常处理
- 通过自定义注解利用AOP在springmvc中实现记录日志
- SpringMVC利用AOP实现自定义注解记录日志
- SpringMVC_05 利用spring框架来处理异常
- 利用java filter 实现业务异常拦截 异常信息集中处理
- springmvc注解开发-高级之异常处理
- SpringMVC利用AOP实现自定义注解记录日志
- 利用自定义注解在SpringMVC中实现自定义权限检查
- SpringMVC利用AOP实现自定义注解记录日志