码迷,mamicode.com
首页 > 编程语言 > 详细

SpringMVC统一异常处理(Controller处理)

时间:2020-03-31 14:51:14      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:stc   通过   imp   地方   异常   注解   子类   目的   src   

1、  在一个controller内的统一处理示例

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.ExceptionHandler;

@RestController
public class TestCtl {

    @RequestMapping("/ready")
    public String ready(){
            throw new RuntimeException("ready抛出的异常");
    }
    
    @ExceptionHandler
    public String ExceptionHandler(Exception e) {
            return e.getMessage();
    }
}

请求结果:

技术图片

也可以自定义Exception,但最好是RuntimeException的子类,以避免“检查异常”必须被处理而造成代码冗余;

    @ExceptionHandler是Spring MVC已有的注解,可用于Controller、ControllerAdvice、RestControllerAdvice类的异常处理。

 

2、 使用ControllerAdvice对同一类异常做统一处理示例:

Controller

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestCtl {

    @RequestMapping("/ready")
    public String ready(){
            throw new RuntimeException("ready抛出的异常");
    }
}

 统一异常拦截类

import org.springframework.core.annotation.Order;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@Order(0)
@RestControllerAdvice(annotations = RestController.class)
public class RestCtlAdvice {

@ExceptionHandler
@ResponseBody //RestControllerAdvice中无需添加此注解,同RestController
    public String ExceptionHandler(Exception e) {
            return e.getMessage();
    }
}

     最后运行结果同1,RestCtlAdvice会对所有RestController中的异常进行处理,如果是Exception(此可以是自定义的特定异常的精细处理)类型异常,RestCtlAdvice类可以有多处,处理顺序按照给定的order来运行。RestController.class也可以替换为Controller.class,则对所有Controller的异常进行拦截。 

     Java 异常体系设计的目的在于通过使用少量代码,实现大型、健壮、可靠程序。异常处理是 Java 中唯一正式的错误报告机制。异常处理机制最大的好处就是降低错误代码处理的复杂程度。

      如果不使用异常,那么就必须在调用点检查特定的错误,并在程序的很多地方去处理它;如果使用异常,那么就不必在方法调用处进行检查,因为异常机制将保证能够捕获这个错误。因此只需要在一个地方处理错误,这种方式不仅节省代码,而且把“描述正确执行过程做什么事”和“出了问题怎么办”相分离。

SpringMVC统一异常处理(Controller处理)

标签:stc   通过   imp   地方   异常   注解   子类   目的   src   

原文地址:https://www.cnblogs.com/aland-1415/p/12604752.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!