SpringBoot全局异常捕获处理实现方案
作者:RobinCode
这篇文章主要详细介绍了SpringBoot全局异常捕获处理实现方案,文章通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
在Spring Boot中实现全局异常处理可以通过以下方式:
- 使用
@ControllerAdvice
注释创建一个全局异常处理类,并使用@ExceptionHandler
注释来定义具体异常的处理方法。
import your.package.IllegalNumberException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; /** * @class GlobalExceptionHeadler * @date 2021/8/28 13:41 */ @ControllerAdvice public class GlobalExceptionHeadler { //处理指定异常 @ExceptionHandler(value = IllegalNumberException.class)//IllegalNumberException 自定义异常 @ResponseBody public ResponseEntity<String> illegalNumberExceptionHeadler(Exception e){ System.out.println("进入非法参数异常处理"); return new ResponseEntity<>(e.getMessage(),HttpStatus.INTERNAL_SERVER_ERROR); } //处理exceptioin子类异常 @ExceptionHandler(value = Exception.class)//作用方法上,作用:用来处理指定异常; value属性:用来处理指定类型的异常 @ResponseBody public ResponseEntity<String> exceptionHeadler(Exception e){ //if(e instanceof IllegalNumberException){} 等价于 上面的方法处理指定异常 System.out.println("进入自定义异常处理"); return new ResponseEntity<>(e.getMessage(),HttpStatus.INTERNAL_SERVER_ERROR); } }
- 自定义异常
/** * @class IllegalNumberException * @date 2021/8/28 14:05 */ public class IllegalNumberException extends RuntimeException{ public IllegalNumberException(String message){ super(message); } }
- Controller
import your.package.IllegalNumberException; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; @RestController @Slf4j public class Test2Controller { @GetMapping("/testException") public ResponseEntity<String> demo(){ int i = 1/0; return new ResponseEntity<>("ok", HttpStatus.OK); } @GetMapping("/testIllegalNumberException/{id}") public ResponseEntity<String> demo(@PathVariable("id") Integer id){ if(id < 0){ throw new IllegalNumberException("无效id,请检查"); } return new ResponseEntity<>("ok", HttpStatus.OK); } }
- Postman测试效果
通用异常:
自定义异常:
总结
在以上代码片段中,使用了 @ExceptionHandler 注解来指定该方法会处理哪种类型的异常。方法体中,你可以自定义返回给用户的响应,包括HTTP状态码和返回信息。使用 @ControllerAdvice 注解可以确保它会接收到由控制器抛出的异常。
如果需要更多具体的自定义设置,还可以在响应里添加 headers 信息,或者创建更复杂的响应体,例如使用ResponseEntity。官方的 Spring 框架文档提供了和这个主题相关的更多高级选项和最佳实践指南。
以上就是SpringBoot全局异常捕获处理实现方案的详细内容,更多关于SpringBoot全局异常捕获处理的资料请关注脚本之家其它相关文章!