Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用@ControllerAdvice如何返回给前端对应错误码

使用@ControllerAdvice如何返回给前端对应错误码

作者头像
johnhuster的分享
发布于 2022-03-29 06:36:01
发布于 2022-03-29 06:36:01
83900
代码可运行
举报
文章被收录于专栏:johnhusterjohnhuster
运行总次数:0
代码可运行

@ControllerAdvice可以捕获spring应用下面未被捕获异常,下面是常见代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @ExceptionHandler(value = Exception.class)
     @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
     public String errorHandler(Exception ex) {
         ApiResultVo<String> resultVo = new ApiResultVo<>();
         resultVo.setErrorCode(500);
         resultVo.setErrorMsg(ex.getMessage());
         return JSON.toJSONString(resultVo);
     }
 
     @ExceptionHandler(value = MyException.class)
     @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
     public String myExceptionHandler(MyException ex) {
         ApiResultVo<String> resultVo = new ApiResultVo<>();
         resultVo.setErrorCode(401);
         resultVo.setErrorMsg(ex.getMessage());
         return JSON.toJSONString(resultVo);
     }    

我们在对应异常处理的上面加上ResponseStatus注解就能将系统异常转换为对应的Http状态码,这部分工作由ResponseStatusExceptionResolver这个类完成,下面是关键代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response,
             Object handler, Exception ex) {
        ResponseStatus responseStatus = AnnotatedElementUtils.findMergedAnnotation(ex.getClass(), ResponseStatus.class);
         if (responseStatus != null) {
             try {
                 return resolveResponseStatus(responseStatus, request, response, handler, ex);
             }
             catch (Exception resolveEx) {
                 logger.warn("Handling of @ResponseStatus resulted in Exception", resolveEx);
             }
         }
         else if (ex.getCause() instanceof Exception) {
             ex = (Exception) ex.getCause();
             return doResolveException(request, response, handler, ex);
         }
         return null;
     }
    protected ModelAndView resolveResponseStatus(ResponseStatus responseStatus, HttpServletRequest request,
             HttpServletResponse response, Object handler, Exception ex) throws Exception {
        int statusCode = responseStatus.code().value();
         String reason = responseStatus.reason();
         if (!StringUtils.hasLength(reason)) {
 response.sendError(statusCode);
         }
         else {
             String resolvedReason = (this.messageSource != null ?
                     this.messageSource.getMessage(reason, null, reason, LocaleContextHolder.getLocale()) :
                     reason);
             response.sendError(statusCode, resolvedReason);
         }
         return new ModelAndView();
     }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/03/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring MVC更多家族成员---框架内异常处理与HandlerExceptionResolver---09
对于上面的Handler处理方法定义来说,直接抛出异常的做法看起来直接违反了这段描述所倡导的异常处理最佳实践标准,而且框架开发者也承认这一点。不过,让我们换一个角度再来看这样的接口设计。
大忽悠爱学习
2022/08/23
4800
Spring MVC更多家族成员---框架内异常处理与HandlerExceptionResolver---09
遨游springmvc之HandlerExceptionResolver1.前言2.原理4.总结
1.前言 在我们的程序中,很多时候会碰到对异常的处理,我们也许会定义一些自己特殊业务的异常,在发生错误的时候会抛出异常,在springmvc的实际应用中,我们经常需要返回异常的信息以及错误代码,并且对异常进行一些处理然后返回再返回视图。这就要涉及到我们这一篇主要讲的HandlerExceptionResolver 2.原理 其实springmvc已经默认给我们注入了3个异常处理的解器: AnnotationMethodHandlerExceptionResolver(针对@ExceptionHandler,
JavaEdge
2018/05/16
1.2K0
web九大组件之---HandlerExceptionResolver异常处理器使用详解【享学Spring MVC】
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
YourBatman
2019/10/22
4.9K0
web九大组件之---HandlerExceptionResolver异常处理器使用详解【享学Spring MVC】
SpringMVC 异常处理体系深入分析
松哥原创的 Spring Boot 视频教程已经杀青,感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程
江南一点雨
2021/04/22
5750
SpringMVC 异常处理体系深入分析
SpringBoot2-----异常处理
但是springmvc底层有basicErrorController专门来处理/error请求,如果用户没有自定义错误页,那么默认显示错误白页
大忽悠爱学习
2021/11/15
6900
SpringMVC全局异常处理机制
SpringMVC除了可以做URL映射和请求拦截外,还可以做全局异常的处理。全局异常处理可能我们平时比较少机会接触,但是每个项目都肯定会做这个处理。比如在上一间公司,是前后端分离的架构,所以后端只要有运行时异常就会报“系统异常,请稍后再试”。如果想要走上架构师的话,这个肯定是要学会的。
java技术爱好者
2020/09/22
1.2K0
SpringMVC全局异常处理机制
遇到 400、500 错误千万不要慌!
很多人都会在平时开发过程中遇到400或500异常,并且也没有走到服务端controller中,就变得有些不知所措。
程序猿DD
2021/09/03
1.3K0
springboot自定义异常界面跳转
机器客户端,它将生成JSON响应,其中包含错误,HTTP状态和异常消息的详细信息。对于浏览器客户端,响应一个“ whitelabel”错误视图,以HTML格式呈现相同的数据
一个风轻云淡
2022/11/13
7030
Spring Boot 无侵入式 实现 API 接口统一 JSON 格式返回
无侵入式 统一返回JSON格式 其实本没有没打算写这篇博客的,但还是要写一下写这篇博客的起因是因为,现在呆着的这家公司居然没有统一的API返回格式?,询问主管他居然告诉我用HTTP状态码就够用了(fx
架构师修炼
2020/11/19
1.3K0
统一定制API返回格式,我只做了这几件事
转自:blog.csdn.net/qq_34347620/article/details/102239179
猿天地
2020/09/22
2.3K0
Spring Boot 无侵入式 实现API接口统一JSON格式返回
2020年Java原创面试题库连载中 【000期】Java最全面试题库思维导图 【020期】JavaSE系列面试题汇总(共18篇) 【028期】JavaWeb系列面试题汇总(共10篇) 【042
java进阶架构师
2020/10/23
1.5K0
Spring Boot 无侵入式 实现API接口统一JSON格式返回
Spring使用@ControllerAdvice注解优雅地处理异常信息
@ControllerAdvice,是Spring3.2+提供的新注解,它是一个Controller增强器,可对Controller中被 @RequestMapping注解的方法加一些逻辑处理。最常用的就是异常处理。
I Teach You 我教你
2023/07/18
1K0
Spring使用@ControllerAdvice注解优雅地处理异常信息
Spring 异常处理的各种姿势
统一的异常处理对于应用的重要性不言而喻。今天我们来介绍一下 Spring 如何来进行统一的 Rest 异常处理。同时我们也会简单比较一下它们之间的优劣。
码农小胖哥
2019/12/10
7320
Spring MVC框架:第十七章:异常映射
异常映射 异常机制是Java程序中针对有可能发生的问题所提前作出的应急解决方案。在SpringMVC中可以通过异常映射的方式,将异常类型和某个视图名称对应起来,让用户不是看到异常信息,而是一个比较友好的界面。
Java廖志伟
2022/09/28
3200
Spring MVC框架:第十七章:异常映射
SpringBoot 系列 web 篇之自定义返回 Http Code 的 n 种姿势
虽然 http 的提供了一整套完整、定义明确的状态码,但实际的业务支持中,后端并不总会遵守这套规则,更多的是在返回结果中,加一个 code 字段来自定义业务状态,即便是后端 5xx 了,返回给前端的 http code 依然是 200
一灰灰blog
2020/02/13
5.7K0
【Spring专题】「技术原理」从源码角度去深入分析关于Spring的异常处理ExceptionHandler的实现原理
ExceptionHandler是Spring框架提供的一个注解,用于处理应用程序中的异常。当应用程序中发生异常时,ExceptionHandler将优先地拦截异常并处理它,然后将处理结果返回到前端。该注解可用于类级别和方法级别,以捕获不同级别的异常。
码界西柚
2023/04/09
3.6K0
【Spring专题】「技术原理」从源码角度去深入分析关于Spring的异常处理ExceptionHandler的实现原理
@ExceptionHandler or HandlerExceptionResolver?如何优雅处理全局异常?【享学Spring MVC】
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
YourBatman
2019/10/22
5.2K0
@ExceptionHandler or HandlerExceptionResolver?如何优雅处理全局异常?【享学Spring MVC】
Spring MVC 你必须关注点
Spring MVC配置简单,特别是在SpringBoot出现后基本都是开箱即用。在实际项目中通常是需要单独去处理一些特殊的情况,比如统一的异常处理,校验器以及国际化。
李鸿坤
2020/07/23
7840
SpringBoot统一异常处理
比如:INTERNAL_SERVER_ERROR 它是服务器只要任何方法执行报任何异常Exception 都会是500。这就会给开发者带来困扰,给用户一个错误就够了。对开发者来说就不够细粒度,因为未来程序的开发大部分是一种前后端分离的开发方式,如果不给接口调用者,具体的错误信息提示的话,可能会造成很多的沟通成本,开发的时间成本。
用户7741497
2022/08/01
8590
Spring 异常处理@ExceptionHandler
翻译:https://www.baeldung.com/exception-handling-for-rest-with-spring
崔认知
2025/08/04
1610
Spring 异常处理@ExceptionHandler
推荐阅读
相关推荐
Spring MVC更多家族成员---框架内异常处理与HandlerExceptionResolver---09
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档