前言
在实际的项目开发过程中,会有大量的异常发生,而我们并不能将异常信息反馈到用户,所以在返回结果的时候需要对异常进行处理,可是如果在每个Controller返回结果都需要进行异常判断,所以最好的办法就是进行统一异常处理并返回相关异常信息。
使用
全局统一异常器,SpringBoot提供了@RestControllerAdvice
注解实现。新建一个GlobalExceptionHandler
的全局异常处理器,并在类上标注@RestControllerAdvice
注解,如下:
@RestControllerAdvice
public class GlobalExceptionHandler {
}
案例
新建业务层
新建业务层来模拟异常发生,如下:
public interface IndexService {
String exceptionTest(Integer type) throws Exception;
}
@Service
public class IndexServiceImpl implements IndexService {
@Override
public String exceptionTest(Integer type) throws Exception {
if(type==2){
throw new Exception("ERROR");
}
return "SUCCESS";
}
}
新建控制层
新建IndexController控制层进行业务层的调用,如下:
@RestController
@RequestMapping("/index")
public class IndexController {
@Resource
private IndexService indexService;
@GetMapping("/{type}")
public Result index(@PathVariable Integer type) throws Exception {
indexService.exceptionTest(type);
return Result.SUCCESS("成功");
}
}
新建统一异常处理器
新建一个GlobalExceptionHandler
的全局异常处理器,并在类上标注@RestControllerAdvice
注解,如下:
/**
* 全局统一的异常处理,可以根据自己的业务要求进行详细配置
**/
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
** 捕获Exception类型的异常就进行处理
**/
@ExceptionHandler({Exception.class})
public Result exceptionHandler(Exception e){
System.out.println("出现异常");
// 返回统一处理结果
return Result.ERROR(e.getMessage());
}
}
测试
启动应用,使用API调试工具,
访问http://localhost/index/1
,返回结果如下:
{
"code": 200,
"msg": "SUCCESS",
"data": "成功"
}
访问http://localhost/index/2
,按照代码逻辑,此时抛出异常信息,而我们使用的全局统一处理异常,返回结果如下:
{
"code": 404,
"msg": "ERROR",
"data": null
}
通过返回结果,可以看出程序的异常通过了统一异常处理类进行了处理并返回。
原创文章,作者:jiafegn,如若转载,请注明出处:https://www.techlearn.cn/archives/615