统一异常处理(代码片段)

飞羽127 飞羽127     2022-11-21     446

关键词:

统一异常处理

在项目中,经常会对一些条件之类的参数进行校验,如果有问题,则向前端返回错误信息。之前的项目里,只有在controller层可以返回错误信息,而在service层,只能返回固定的结果,不能说明错误信息。此时可以通过自定义异常,然后统一处理来解决。

对于统一异常,通常有四种解决方法,推荐使用 第一种 或者 第四种,分别如下

(推荐)方法一: 通过配置文件设置异常处理

自定义异常

/**
 * 统一异常信息
 *
 * @author feiyu127
 * @date 2018-06-06 11:19
 */
public class CustomException extends RuntimeException 
    public CustomException() 
    

    public CustomException(String message) 
        super(message);
    

    public CustomException(String message, Throwable cause) 
        super(message, cause);
    


对异常捕获并处理

/**
 * @author feiyu127
 * @date 2018-06-06 11:15
 */
@Configuration
public class WebMvcConfigure extends WebMvcConfigurerAdapter 

    private final Logger logger = LoggerFactory.getLogger(WebMvcConfigurer.class);
    // 对自定义的异常进行处理,非自定义的不处理
    @Override
    public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) 
        exceptionResolvers.add((request, response,handler, ex) -> 
            if (ex instanceof CustomException) 
                Result result = ResultUtil.buildFail(ex.getMessage());
                responseResult(response, result);
            
            return new ModelAndView();
        );
    
    // 输出json格式错误信息
    private void responseResult(HttpServletResponse response, Result result) 
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Content-type", "application/json;charset=UTF-8");
        response.setStatus(200);
        try 
            response.getWriter().write(JSON.toJSONString(result));
         catch (IOException ex) 
            logger.error(ex.getMessage());
        
    

在以上配置后,在service层校验失败后,可以主动去抛自定义异常来直接向前端返回错误提示信息

方法二:使用springmvc中自带的简单异常处理器 SimpleMappingExceptionResolver

方法三 : 使用 @ExceptionHandler 注解实现异常处理

在BaseController 里对异常进行设置,需要捕获的controller都需继承该BaseController

public class BaseController  
    @ExceptionHandler
    @ResponseBody
    public Map<String, Object> exp(HttpServletRequest request, Exception ex)  
      Map<String, Object> data = new HashMap<String, Object>();
        if(ex instanceof CustomException) 
            CustomException e = (CustomException)ex;
        
        data.put("msg", ex.getMessage());
        data.put("success", false);
        data.put("data", null)
    

(推荐)方法四: @ControllerAdvice 配合 @ExceptionHandler 使用,达到方法一的效果

@RestControllerAdvice
public class ExceptionHandlerController 

    @ExceptionHandler
    public Result handleCustomException(Exception ex) 
        if (ex instanceof CustomException) 
            Result result = ResultUtil.buildFail(ex.getMessage());
            return result;
        
        return null;
    

参考链接:

  1. Spring MVC异常统一处理的三种方式
  2. SpringMVC中的统一异常处理

统一异常处理@exceptionhandler(代码片段)

异常处理功能中用到的注解是:@ExceptionHandler(异常类型.class). 这个注解的功能是:自动捕获controller层出现的指定类型异常,并对该异常进行相应的异常处理. 比如我要在controller层中处理InsertMessageException类型异常,我就可以在co... 查看详情

django统一异常处理(代码片段)

概述在项目中统一异常处理,可以防止代码中有未捕获的异常出现。本文介绍如何在Django项目中进行统一异常的处理,再结合状态码枚举类对项目异常信息进行日志记录。Django统一异常处理在Django项目中可以自定义中间... 查看详情

springboot全局异常统一处理(代码片段)

统一处理机制spring系统异常:@ControllerAdvice&@ExceptionHandlerhttp异常ErrorControllerServlet异常Filter1.SpringBoot默认错误统一处理机制在基于SpringBoot的Web应用中,对于Http请求处理过程中发生的各种错误,如常见的400、404... 查看详情

springboot统一异常处理(代码片段)

DemoException,自定义异常@GetterpublicclassDemoExceptionextendsRuntimeExceptionprivateIntegercode;publicDemoException(ResultEnumresultEnum)super(resultEnum.getMessage());this.code=resultEnum.getCode();pu 查看详情

统一异常处理的实现(代码片段)

...门系列文章》接下来主要讲解如何在SpringBoot应用中使用统一异常处理。如何实现对异常数据与正常的业务数据统一以json形式返回? 为什么要统一异常处理当前我们项目架构基本上都是前后端分离的模式,采用Restful接口形式... 查看详情

springboot初始教程之统一异常处理(代码片段)

SpringBoot初始教程之统一异常处理(三)1.介绍在日常开发中发生了异常,往往是需要通过一个统一的异常处理处理所有异常,来保证客户端能够收到友好的提示。SpringBoot在页面发生异常的时候会自动把请求转到/error,Spr... 查看详情

springboot初始教程之统一异常处理(代码片段)

SpringBoot初始教程之统一异常处理(三)1.介绍在日常开发中发生了异常,往往是需要通过一个统一的异常处理处理所有异常,来保证客户端能够收到友好的提示。SpringBoot在页面发生异常的时候会自动把请求转到/error,Spr... 查看详情

统一异常处理这样剖析,安否?(代码片段)

...还是计算机世界难免发生异常,上一篇文章RESTfulAPI返回统一JSON数据格式说明了统一返回的处理,这是请求一切正常的情形;这篇文章将说明如何统一处理异常,以及其背后的实现原理,老套路,先实现,后说明原理,有了上一... 查看详情

springmvc统一异常处理(代码片段)

SpringMVC统一异常处理在SpringMVC应用开发中,不管是对底层数据库的操作,还是对业务层或者控制层的操作,都不可避免的会遇到各种可预知的和不可预知的异常需要处理。如果每个过程都要单独处理异常,那么系... 查看详情

.netcore统一参数校验异常处理结果返回功能实现(代码片段)

...端开发在参数校验、异常处理等都是各写各的,没有统一处理的话,代码就不优雅,也不容易维护。所以,我们需要统一校验参数,统一异常处理、统一结果返回,让代码更加规范、可读性更强、更容易维... 查看详情

.netcore统一参数校验异常处理结果返回功能实现(代码片段)

...端开发在参数校验、异常处理等都是各写各的,没有统一处理的话,代码就不优雅,也不容易维护。所以,我们需要统一校验参数,统一异常处理、统一结果返回,让代码更加规范、可读性更强、更容易维... 查看详情

.netcore统一参数校验异常处理结果返回功能实现(代码片段)

...端开发在参数校验、异常处理等都是各写各的,没有统一处理的话,代码就不优雅,也不容易维护。所以,我们需要统一校验参数,统一异常处理、统一结果返回,让代码更加规范、可读性更强、更容易维... 查看详情

开发之统一异常处理(代码片段)

系统对异常的处理使用统一的异常处理流程:1、自定义异常类型。2、自定义错误代码及错误信息。3、对于可预知的异常由程序员在代码中主动抛出,由SpringMVC统一捕获。可预知异常是程序员在代码中手动抛出本系统定义的特定... 查看详情

django统一异常处理(代码片段)

概述在项目中统一异常处理,可以防止代码中有未捕获的异常出现。本文介绍如何在Django项目中进行统一异常的处理,再结合状态码枚举类对项目异常信息进行日志记录。Django统一异常处理在Django项目中可以自定义中间... 查看详情

django统一异常处理(代码片段)

概述在项目中统一异常处理,可以防止代码中有未捕获的异常出现。本文介绍如何在Django项目中进行统一异常的处理,再结合状态码枚举类对项目异常信息进行日志记录。Django统一异常处理在Django项目中可以自定义中间... 查看详情

restful接口调用统一异常处理(代码片段)

1.关键字解释//它是一个Controller增强器,可对controller中被@RequestMapping注解的方法加一些逻辑处理@ControllerAdvice//异常定义@ExceptionHandler//返回格式为json,可以使用@RestControllerAdvice代替@ControllerAdvice,这样在方法上就可以不需要添加@Respon... 查看详情

简单的实现登录拦截及统一异常处理(自定义异常)(代码片段)

webmvc配置类:@ConfigurationpublicclassWebMvcConfigextendsWebMvcConfigurationSupport@OverrideprotectedvoidaddInterceptors(InterceptorRegistryregistry)registry.addInterceptor(newLoginInterceptor()).addPa 查看详情

谷粒商城-品牌管理-统一异常处理(代码片段)

统一异常处理类 对于项目中出现的异常,我们通常采用ControllerAdvice的方式进行统一处理,简化代码。1)、编写异常处理类,使用@ControllerAdvice。2)、使用@ExceptionHandler标注方法可以处理的异常。packageco... 查看详情