Springboot项目如何优雅返回结果,以及全局异常处理,枚举类的定义

 以下是个人在做项目阶段,对项目中不熟悉问题的总结,欢迎各位大佬指正

1、枚举类的定义

①、枚举类中的常量值必须全部为大写,并且枚举类属性默认为 public static final

②、枚举类常量定义用‘ , ’隔开,在最后一个逗号之后在使用分号

一下是一个标准的枚举类的定义:

public enum LevelEnum {
    HEADER("主管"),//用逗号隔开
    EMPLOYEE("员工"),
    USER_LOGIN_SUCCESS("200","登录成功"),
    USER_LOGIN_ERROR("400","登录失败"),
    ;//最后用分号

    public String level;//属性类型默认为public final,即使此处没有显示的定义final

    LevelEnum(String level) {//构造方法,为别的类能够调用枚举类的level属性
        this.level = level;
    }
}

2、对于服务器端出现的各种异常的处理:

①、定义全局异常处理器,拦截所有在程序中出现的异常并且以JSON格式的数据统一返回给前端:

·使用@ControllerAdvice(basePackages="com.atlzk.controller")注解,basePackages是表示需要处理异常的包,

但是如果没有加,basePackages则该异常处理器,只会拦截该类所在包下出现的异常。(想要拦截所有包出现的异常则basePackages=com即可

②、全局异常处理器:

package com.atlzk.common.exception;


import com.atlzk.common.Result;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;


@ControllerAdvice(basePackages="com.atlzk.controller")//表示该处理器拦截controller所在包下面吹出现的异常
public class GlobalExceptionHandler {

   // private static final Log log = LogFactory.get();


    //统一异常处理@ExceptionHandler,主要用于Exception
    @ExceptionHandler(Exception.class)
    @ResponseBody//返回json串
    public Result error(HttpServletRequest request, Exception e){
        return Result.error();
    }



    @ExceptionHandler(CustomeException.class)//获取自定义的CustomeException异常
    @ResponseBody//返回json串
    public Result customError(HttpServletRequest request, CustomeException e){
        return Result.error(e.getCode(), e.getMsg());
    }
}
import com.atlzk.common.enums.ResultCodeEnum;

public class CustomeException extends RuntimeException{
    private String msg;
    private String code;

    public CustomeException(String code,String msg){
        super(msg);
        this.msg=msg;
        this.code=code;
    }

    public CustomeException(ResultCodeEnum resultCodeEnum) {
        this.msg=resultCodeEnum.msg;
        this.code=resultCodeEnum.code;
    }

    public String getMsg(){
        return msg;
    }
    public void setMsg(String msg){
        this.msg=msg;
    }
    public String getCode(){
        return  code;
    }
    public void setCode(String code){
        this.code=code;
    }
}

3、定义统一的返回结果:Result类,其中方法均为static是为了通过类名可以直接调用其中的success/error方法

import com.atlzk.common.enums.ResultCodeEnum;

public class Result {
    private String code;
    private String msg;
    private Object data;

    private Result(Object data) {
        this.data = data;
    }

    public Result() {
    }

    public static Result success() {//返回一个表示成功的 Result 对象。设置状态码为 SUCCESS.code,消息为 SUCCESS.msg。
        Result tResult = new Result();
        tResult.setCode(ResultCodeEnum.SUCCESS.code);
        tResult.setMsg(ResultCodeEnum.SUCCESS.msg);
        return tResult;
    }

    public static Result success(Object data) {//表示成功的Result对象,你需要传入一个data数据
        Result tResult = new Result (data);
        tResult.setCode(ResultCodeEnum.SUCCESS.code);
        tResult.setMsg(ResultCodeEnum.SUCCESS.msg);
        return tResult;
    }

    public static Result error() {
        Result tResult = new Result();
        tResult.setCode(ResultCodeEnum.SYSTEM_ERROR.code);
        tResult.setMsg(ResultCodeEnum.SYSTEM_ERROR.msg);
        return tResult;
    }

    public static Result error(String code, String msg) {
        Result tResult = new Result();
        tResult.setCode(code);
        tResult.setMsg(msg);
        return tResult;
    }

    public static Result error(ResultCodeEnum resultCodeEnum) {
        Result tResult = new Result();
        tResult.setCode(resultCodeEnum.code);
        tResult.setMsg(resultCodeEnum.msg);
        return tResult;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

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

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值