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全局异常捕获处理的资料请关注脚本之家其它相关文章!
相关文章
使用LambdaQueryWrapper动态加过滤条件 动态Lambda
这篇文章主要介绍了使用LambdaQueryWrapper动态加过滤条件 动态Lambda,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。2022-01-01springcloud gateway设置context-path的操作
这篇文章主要介绍了springcloud gateway设置context-path的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-07-07Java restTemplate发送get请求query参数传递问题解决
这篇文章主要为大家介绍了Java restTemplate发送get请求query参数传递问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-11-11
最新评论