springboot工程中的异常处理方式
一、自行处理异常:在控制层中,添加try{}catch(){}(也称之为 异常处理的模板代码),具体代码如下:
@RequestMapping("doCompute/{n1}/{n2}")
@ResponseBody
public String doCompute(@PathVariable Integer n1,
@PathVariable Integer n2){
try{
需要处理异常的部分代码
return "Result is "+result;
}catch(ArithmeticException e){
return "exception is "+e.getMessage();
}
}
or throwable(不推荐)
二、在Controller类中添加异常处理方法:
这种处理异常的方式通常用于较少的Controller类的异常处理
@ExceptionHandler(ArithmeticException.class)
@ResponseBody
public String doHandleArithmeticException(ArithmeticException e){
e.printStackTrace();
return "计算过程中出现了异常,异常信息为"+e.getMessage();
}
其中@ExceptionHandler(ArithmeticException.class),注解描述的方法为异常处理方法(注解中的异常类型为可处理的异常类型)
三、控制层中全局异常处理方法:
当项目由多个控制层类中有多个共性异常的处理方法定义时,我们可以将这些方法提取到公共的父类对象中,但是这种方式是一种强耦合的实现,不利于代码的维护。
借助spring框架中web模块定义的全局异常处理规范进行实现,例如定义全局异常处理类,代码如下:
package com.cy.pj.common.web;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
//@ControllerAdvice
//@ResponseBody
@RestControllerAdvice//[email protected][email protected]
public class GlobalExceptionHandler {
@ExceptionHandler(ArithmeticException.class)
public String doHandleArithmeticException(ArithmeticException e){
return "the exception msg is"+e.getMessage();
}}
@RestControllerAdvice 注解描述的类为全局异常处理类,当控制层方法中的异常没有自己捕获,也没有定义其内部的异常处理方法,底层默认会查找全局异常处理类,调用对应的异常处理方法进行异常处理。
异常处理的优先级顺序:系统会有限查找有没有自行捕获异常的方法,如果控制层方法中的异常没有自己捕获,再找定义的控制层内的异常处理方法,如果也没有定义其内部的异常处理方法,底层默认会查找全局异常处理类。
异常处理的目的:
有效提高其用户体验,加强系统的容错能力!