Result异常及结果、枚举封装

1、简单封装

最常想到是一个类封装消息、另一个返回结果

public class CodeMsg {

    private int code;
    private String msg;

    public static CodeMsg SUCCESS = new CodeMsg(0, "success");
    public static CodeMsg  ERROR = new CodeMsg(500, "服务端异常");

    private CodeMsg(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    public int getCode() {
        return code;
    }
    public String getMsg() {
        return msg;
    }

}

public class Result<T> implements Serializable {

    private int code;
    private String msg;
    private T data;
    
    public static <T> Result<T> success(T data){
        return new  Result<T>(data);
    }
    public static <T> Result<T> error(CodeMsg cm){
        return new  Result<T>(cm);
    }
	
	 private Result(T data) {
        this.code = 0;
        this.msg = "success";
        this.data = data;
    }
  
    private Result(CodeMsg cm) {
        if(cm == null) {
            return;
        }
        this.code = cm.getCode();
        this.msg = cm.getMsg();
    }
}

2、以枚举作为参数封装

2.1 枚举类

根据业务类型通常定义通用枚举,业务枚举异常;

public enum  CodeMsgEnum {

    /**
     * 通用枚举,各个系统模块可
     */
    SUCCESS("200", "成功"),
    SREVER_ERROR("500", "服务器内部错误");

    private final String code;
    private final String message;

    CodeMsgEnum(String code, String message) {
        this.code = code;
        this.message = message;
    }
    public static CodeMsgEnum getCodeMsgEnumByCode(String code) {
        for (CodeMsgEnum codeMsgEnum : CodeMsgEnum.values()) {
            if (codeMsgEnum.code.equals(code)) {
                return codeMsgEnum;
            }
        }
        return null;
    }
    public String getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
}

2.2 与异常结合

public class BusinessException  extends RuntimeException {

    /**
     * code
     */
    private String code;
    /**
     * 异常信息
     */
    private String message;


    public BusinessException() {
    }

    /**
     * 服务端未知异常
     *
     * @param message
     */
    public BusinessException(String message) {
        super(message);
        this.code = CodeMsgEnum.SREVER_ERROR.getCode();
        this.message = message;
    }

    public BusinessException(String message, Throwable cause) {
        super(message, cause);
        this.code = CodeMsgEnum.SREVER_ERROR.getCode();
        this.message = message;
    }

    /**
     * 返回常用异常类型:
     *    CodeMsgEnum 通用异常
     * @param codeMsgEnum
     */
    public BusinessException(CodeMsgEnum codeMsgEnum) {
        super(codeMsgEnum.getMessage());
        this.code = codeMsgEnum.getCode();
        this.message = codeMsgEnum.getMessage();
    }

    /**
     * 异常信息传入:
     *    方便每个业务系统定义各自内部异常
     * @param code
     * @param message
     */
    public BusinessException(String code, String message) {
        super(message);
        this.code = code;
        this.message = message;
    }
}

2.3 响应结果

public class Result<T> implements Serializable {


    private String code;
    private String message;
    private T data;

    public Result() {}

    public Result(CodeMsgEnum codeMsgEnum) {
        this.code = codeMsgEnum.getCode();
        this.message = codeMsgEnum.getMessage();
    }

    public Result(CodeMsgEnum codeMsgEnum, T data) {
        this.code = codeMsgEnum.getCode();
        this.message = codeMsgEnum.getMessage();
        this.data = data;
    }

    public Result(String code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    public static <T> Result<T> success(T data) {
        return new Result(CodeMsgEnum.SUCCESS, data);
    }

    public static <T> Result<T> success() {
        return new Result(CodeMsgEnum.SUCCESS,null);
    }


    public static  <T> Result<T> error(CodeMsgEnum codeMsgEnum) {
        return new Result(codeMsgEnum,null);
    }

    public static  <T> Result<T> error(String code, String msg) {
        return new Result(code, msg,null);
    }

    public static  <T> Result<T> error(String msg) {
        return new Result(CodeMsgEnum.SREVER_ERROR.getCode(), msg ,null);
    }

}

3、枚举封装实现优化

3.1 枚举类

在2的实现中异常情况不需要返回data, 这里我们将枚举再抽象一层

public interface ICodeMsgEnum {
    String getCode();
    String getMessage();
}

// 通用枚举类
public enum CommonCodeMsgEnum implements ICodeMsgEnum {
    SUCCESS("200", "SUCCESS"),
    SERVER_BUSY("9998", "服务器繁忙"),
    SERVER_ERROR("9999", "网络异常");
    
    /**
     * 返回码
     */
    private String code;
    /**
     * 返回消息
     */
    private String message;

    CommonCodeMsgEnum(String code, String msg) {
        this.code = code;
        this.message = msg;
    }
}

// 业务枚举
public enum ExceptionCodeMsgEnum {

    BAD_LICENCE_TYPE("7001", "Bad licence type."),
    LICENCE_NOT_FOUND("7002", "Licence not found."),

    private String code;
    private String message;

    ExceptionCodeMsgEnum(String code, String msg) {
        this.code = code;
        this.message = msg;
    }
}

3.2 异常封装

// 异常基类
public class BaseException extends RuntimeException {

    String code;
    String message;

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

    public BaseException(ICodeMsgEnum responseEnum) {
        super(responseEnum.getMessage());
        this.code = responseEnum.getCode();
        this.message = responseEnum.getMessage();
    }

    public BaseException(ICodeMsgEnum responseEnum, Throwable cause) {
        super(responseEnum.getMessage(), cause);
        this.code = responseEnum.getCode();
        this.message = responseEnum.getMessage();
    }
}

// 业务异常
public class BusinessException extends BaseException {

    private static final long serialVersionUID = 1L;

    public BusinessException(ICodeMsgEnum response) {
        super(response);
    }

    public BusinessException(ICodeMsgEnum response, Throwable cause) {
        super(response,cause);
    }

}

3.3 响应结果

public class Result {
    /**
     * 返回码
     */
    protected String code;
    /**
     * 返回消息
     */
    protected String message;

    public Result() {
        this(CommonCodeMsgEnum.SUCCESS);
    }
    
    public Result(ICodeMsgEnum responseEnum) {
        this(responseEnum.getCode(), responseEnum.getMessage());
    }

    public Result(String code,String msg){
        this.code = code;
        this.message = msg;
    }

}

// 成功调用
public class CommonResult<T> extends Result {
    private T data;
    public CommonResult() {
        super();
    }
    public CommonResult(T data) {
        super();
        this.data = data;
    }
}

// 失败调用
public class ErrorResult extends Result {
    public ErrorResult() {
    }
    public ErrorResult(String code, String message) {
        super(code, message);
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Springboot Result是一个通用的返回结果类,用于封装请求的返回结果。它包含了一个code字段用于表示请求结果的状态码,一个msg字段用于表示请求结果的信息,以及一个data字段用于存储返回的数据。 在使用Springboot Result时,可以根据不同的业务需求,选择不同的静态方法来创建Result对象。比如,可以使用success方法来创建一个成功的Result对象,并设置相应的状态码和信息。也可以使用success方法传入一个泛型参数来创建一个带有数据的成功的Result对象。 在实际应用中,可以将Result对象作为方法的返回值,同时也可以在方法参数中接收Result对象。通过这种方式,可以统一定义返回结果的结构,并且方便进行类型检查和处理。 另外,根据学习发现,对于错误代码的处理可以使用枚类来定义,这样可以更加清晰地表示不同的错误类型。同时,为了方便处理返回的数据,可以使用Map来存储返回数据。 总结来说,Springboot Result是一个方便封装返回结果的通用类,可以根据业务需求来选择不同的方法来创建Result对象,并且可以统一定义返回结果的结构和类型。同时,通过枚类和Map的使用,可以更好地处理错误类型和返回数据的操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [springboot——Result(返回类)](https://blog.csdn.net/weixin_43689176/article/details/121884392)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [SpringBoot通用处理结果类/前端使用结果类 Result](https://blog.csdn.net/fatfish517/article/details/124004764)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值