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

知行合一 知行合一     2022-11-10     350

关键词:

1 统一请求返回的最外层对象

日常处理请求时,异常返回结果与正常返回结果格式不一样,不利于前后端的数据交互,如果不处理也不利于编码。封装一个统一请求返回结果最外层对象是一种比较好的设计思想。

package com.latiny.pojo;

public class Result<T> 

    //提示码
    private Integer code;
    //提示信息
    private String msg;
    //具体内容
    private T data;

    public Integer getCode() 
        return code;
    

    public void setCode(Integer code) 
        this.code = code;
    

    public String getMsg() 
        return msg;
    

    public void setMsg(String msg) 
        this.msg = msg;
    

    public T getData() 
        return data;
    

    public void setData(T data) 
        this.data = data;
    

 

2 统一对象类的操作封装到一个工具类,避免重复代码

package com.latiny.Util;
import com.latiny.pojo.Result;

public class ResultUtil 

    public static Result success(Object object)
        Result result = new Result();
        result.setCode(0);
        result.setMsg("成功");
        result.setData(object);
        return result;
    

    public static Result success()
        return success(null);
    

    public static Result error(Integer code, String message)
        Result result = new Result();
        result.setCode(code);
        result.setMsg(message);
        result.setData("null");
        return result;
    

 

3 添加异常捕获类

package com.latiny.handle;

import com.latiny.Util.ResultUtil;
import com.latiny.exception.GirlException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import com.latiny.pojo.Result;

@ControllerAdvice
public class ExceptionHandle 

    private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.class);

    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public Result handle(Exception e)
        
        if(e instanceof GirlException)
            GirlException girlException = (GirlException)e;
            return ResultUtil.error(girlException.getCode(),girlException.getMessage());
        else
            logger.error("系统异常", e);
            System.out.println(e.getMessage());
            return ResultUtil.error(-1, "未知错误");
        
    

 

4 自定义异常类

针对不同异常,我们有时候不仅需要管理查看异常信息,更希望不同的异常有不同的编号,但是直接抛出的Exception异常是没有编号的,此时我们可以自定义异常。自定义异常可以继承Exception,也可以继承RuntimeException,区别是RuntimeException发生时会对事务进行回滚,Exception不会。

package com.latiny.exception;

import com.latiny.enums.ResultEnum;

public class GirlException extends RuntimeException 

    private Integer code;

    public GirlException(ResultEnum resultEnum) 
        super(resultEnum.getMessage());
        this.code = resultEnum.getCode();
    

    public Integer getCode() 
        return code;
    

    public void setCode(Integer code) 
        this.code = code;
    

 

5 枚举类统一管理异常编码与提示信息

package com.latiny.enums;

public enum ResultEnum 
    UNKONW_ERROR(-1, "未知错误"),
    SUCCES(0, "成功"),
    PRIMARY_SCHOOL(100, "年龄异常1: 小学"),
    MIDDLE_SCHOOL(101, "年龄异常2: 初中"),
    GRADUATE(102, "年龄异常3: 高中"),
    ;
    
    private Integer code;
    private String message;

    ResultEnum(Integer code, String message) 
        this.code = code;
        this.message = message;
    

    public Integer getCode() 
        return code;
    

    public String getMessage() 
        return message;
    

 

编码时在其他业务逻辑层只需要将异常向调用层抛出即可,即:dao -> service -> controler,最后异常到controller层时,controller将异常交给异常处理器处理。

 

统一异常处理@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... 查看详情