Skip to content

  • 体验新版
    • 正在加载...
  • 登录
  • KnowledgePlanet
  • docdoc
  • Issue
  • #13

doc
doc
  • 项目概览

KnowledgePlanet / doc

通知 1303
Star 822
Fork 117
  • 代码
    • 文件
    • 提交
    • 分支
    • Tags
    • 贡献者
    • 分支图
    • Diff
  • Issue 42
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 0
  • DevOps
    • 流水线
    • 流水线任务
    • 计划
  • Wiki 2
    • Wiki
  • 分析
    • 仓库
    • DevOps
  • 项目成员
  • Pages
doc
doc
  • 项目概览
    • 项目概览
    • 详情
    • 发布
  • 仓库
    • 仓库
    • 文件
    • 提交
    • 分支
    • 标签
    • 贡献者
    • 分支图
    • 比较
  • Issue 42
    • Issue 42
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 0
    • 合并请求 0
  • Pages
  • DevOps
    • DevOps
    • 流水线
    • 流水线任务
    • 计划
  • 分析
    • 分析
    • 仓库分析
    • DevOps
  • Wiki 2
    • Wiki
  • 成员
    • 成员
  • 收起侧边栏
  • 动态
  • 分支图
  • 创建新Issue
  • 流水线任务
  • 提交
  • Issue看板
You need to sign in or sign up before continuing.
已关闭
开放中
Opened 5月 17, 2023 by 小傅哥@Yao__Shun__Yu⛹Owner

SpringBoot 统一拦截错误调用

我们对外提供的rest接口,是通过原本的dubbo接口来支持rest协议实现的。现在遇到一个问题,比如我某个字段定义了long,然后传了一个中文进来。在进入接口前,就报了fastjson类型转换异常了。然后就默认返回了500。我试了加aop在进入方法前拦截,结果不行。进入不到aop里边。有什么方法能把这个异常捕获到,并统一返回吗?


在Spring Boot应用中定义自定义异常处理器(Exception Handler),以捕获和处理各种异常并提供统一的错误响应。

要实现这个功能,您需要首先定义一个类来处理将抛出的异常转换为标准的错误响应。例如:

@ControllerAdvice
public class RestExceptionHandler {
 
    @ExceptionHandler({ MethodArgumentTypeMismatchException.class })
    public ResponseEntity<Object> handleMethodArgumentTypeMismatch(MethodArgumentTypeMismatchException ex, WebRequest request) {
        String error = "Invalid argument: " + ex.getName() + ". Expected type " + ex.getRequiredType().getName() + ".";
        RestErrorResponse apiError = new RestErrorResponse(HttpStatus.BAD_REQUEST, error);
        return new ResponseEntity<Object>(apiError, new HttpHeaders(), apiError.getStatus());
    }
}

在上述示例中,我们使用@ControllerAdvice注解来标识这是一个全局异常处理器类,并通过@ExceptionHandler注解来指定要处理的特定异常类型。在handleMethodArgumentTypeMismatch方法中,我们将方法参数类型不匹配的异常转换为通用的RestErrorResponse对象,并返回该对象的HTTP状态码、错误原因、错误代码等信息。

在Spring Boot应用中,当发生异常时,会自动查找适合的异常处理器类进行异常处理。如果找到了与抛出异常相匹配的异常处理器类,则调用该类中的异常处理方法来生成标准的错误响应。否则,将返回默认的500错误响应。

需要注意的是,在上述示例中,我们只处理了其中一种异常类型,您需要根据具体需求来定义适合的异常处理器类,并处理相应的异常类型。

另外,如果需要在RestController类的方法中捕获异常并返回自定义返回信息,您可以使用@ExceptionHandler注解将异常处理程序添加到特定的控制器方法中。例如:

@RestController
public class MyController {

    @GetMapping("/parseLong")
    public String parseLong(@RequestParam("value") Long value) {
        return "Value: " + value;
    }

    @ExceptionHandler({ MethodArgumentTypeMismatchException.class })
    public ResponseEntity<Object> handleMethodArgumentTypeMismatch(MethodArgumentTypeMismatchException ex, WebRequest request) {
        String error = "Invalid argument: " + ex.getName() + ". Expected type " + ex.getRequiredType().getName() + ".";
        RestErrorResponse apiError = new RestErrorResponse(HttpStatus.BAD_REQUEST, error);
        return new ResponseEntity<Object>(apiError, new HttpHeaders(), apiError.getStatus());
    }
}

在上述示例中,我们使用@GetMapping注解定义一个接受Long类型参数的RESTful API,并通过@ExceptionHandler注解将异常处理程序添加到方法中。这样,在发生方法参数类型不匹配的异常时,会调用handleMethodArgumentTypeMismatch方法来生成标准的错误响应。

指派人
分配到
无
里程碑
无
分配里程碑
工时统计
无
截止日期
无
标识: KnowledgePlanet/doc#13
渝ICP备2023009037号

京公网安备11010502055752号

网络110报警服务 Powered by GitLab CE v13.7
开源知识
Git 入门 Pro Git 电子书 在线学 Git
Markdown 基础入门 IT 技术知识开源图谱
帮助
使用手册 反馈建议 博客
《GitCode 隐私声明》 《GitCode 服务条款》 关于GitCode
Powered by GitLab CE v13.7