SpringBoot学习笔记:全局异常处理
Posted 听风者-better
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot学习笔记:全局异常处理相关的知识,希望对你有一定的参考价值。
SpringBoot可以使用@ControllerAdvice注解进行全局异常的处理,这样可以方便统一对异常的处理返回
1.处理常见异常
首先我们需要确定一个异常处理统一返回的格式
@Data
public class BaseResult
/**
* 返回code,成功为0,失败为-1
*/
private String code;
/**
* 返回数据
*/
private Object data;
/**
* 返回信息
*/
private String msg;
public BaseResult()
public BaseResult(String code, Object data, String msg)
this.code = code;
this.data = data;
this.msg = msg;
public BaseResult success(Object data, String msg)
return new BaseResult("0", data, msg);
public BaseResult failed(String msg)
return new BaseResult("-1", null, msg);
接着定义一个全局异常处理类,这里以空指针异常为目标进行处理返回
@ControllerAdvice
@ResponseBody
public class BaseExceptionHandler
@ExceptionHandler(NullPointerException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public BaseResult handleNullException(NullPointerException e)
return new BaseResult().failed("空指针异常");
测试请求
@RestController
public class TestController
@GetMapping("/test")
public String test()
String s = null;
s.toString();
return "test";
2.处理自定义异常
除了一些常见异常的处理,我们还可以自定义一些业务异常
public class BusinessException extends RuntimeException
/**
* 自定义项目内异常
*/
public BusinessException(String msg)
super(msg);
在全局异常处理类里添加对自定义异常的处理
@ExceptionHandler(BusinessException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public BaseResult handleBusinessException(BusinessException e)
return new BaseResult().failed(e.getMessage());
测试请求
@GetMapping("/test2")
public String test2()
try
int i = 1 / 0;
catch (Exception e)
throw new BusinessException("测试自定义异常");
return "test2";
以上是关于SpringBoot学习笔记:全局异常处理的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot学习14:springboot异常处理方式4(使用SimpleMappingExceptionResolver处理异常)
SpringBoot学习13:springboot异常处理方式3(使用@ControllerAdvice+@ExceptionHandle注解)