java自定义异常并使用API统一返回对象

本文介绍了在开发中如何使用API统一返回带有状态码、信息和数据的对象,确保前后端通信的格式化,以及如何处理成功和错误情况,包括自定义异常类PlatformException的应用。
摘要由CSDN通过智能技术生成

在开发中,需要使用API统一返回对象保证后端返回的数据是固定并有格式的,便于前端进行解析,返回相应的信息给用户,这就要求不管程序抛出任何错误或异常,你所返回的对象都应该是:

{

    "status": ‘状态码’,

    "msg": "信息",

    “data”:“数据”

}

使用API统一返回对象的流程如下:

1、创建一个API统一返回对象的类:

该类应该包含status(状态码)、msg(信息)、data(数据);data的类型应设置为泛型,方便作为参数传输。并构造对应的get和set方法

定义成功的状态码、信息:

public class ApiRestResponse <T>{
    private Integer status;
    private String msg;
    private T data;
    private static final int OK_CODE =  10000;
    private static  final String OK_MSG = "success";
}

成功时,不需要返回数据的方法:

public ApiRestResponse(Integer status, String msg) {
    this.status = status;
    this.msg = msg;
}
public ApiRestResponse(){
    this(OK_CODE,OK_MSG);
}

还需要一个返回数据的方法(包含成功和失败):

public ApiRestResponse(Integer status, String msg, T data) {
    this.status = status;
    this.msg = msg;
    this.data = data;
}
//错误时返回错误编码和信息,传入异常枚举类,返回相应的code和msg
public static <T> ApiRestResponse<T> success(T result) {
    ApiRestResponse<T> response = new ApiRestResponse<>();
    response.setStatus((Integer) result);
    return response;
}

完整的类:

public class ApiRestResponse <T>{
    private Integer status;
    private String msg;
    private T data;

    private static final int OK_CODE =  10000;

    private static  final String OK_MSG = "success";

    public ApiRestResponse(Integer status, String msg, T data) {
        this.status = status;
        this.msg = msg;
        this.data = data;
    }

    public ApiRestResponse(Integer status, String msg) {
        this.status = status;
        this.msg = msg;
    }

    public ApiRestResponse(){
        this(OK_CODE,OK_MSG);
    }

//    成功时返回通用响应对象
    public static <T> ApiRestResponse<T> success(){
        return new ApiRestResponse<>();
    }

    public static <T> ApiRestResponse<T> success(T result) {
        ApiRestResponse<T> response = new ApiRestResponse<>();
        response.setData(result);
        return response;
    }

//    错误时返回错误编码和信息,传入异常枚举类,返回相应的code和msg
    public static  <T> ApiRestResponse<T> error(PlatformExceptionEnum ex){
        return new ApiRestResponse<>(ex.getCode(), ex.getMsg());
    }

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

    @Override
    public String toString() {
        return "ApiRestResponse{" +
                "status=" + status +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }

    public T getData() {
        return data;
    }

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

    public Integer getStatus() {
        return status;
    }

    public String getMsg() {
        return msg;
    }

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

    public void setStatus(Integer status) {
        this.status = status;
    }
}

在上面这个类中,PlatformExceptionEnum ex是自定义的统一异常类,根据不同的情况返回不同的信息和状态码。

代码如下:

public class PlatformException extends Exception{
    private final Integer code;
    private final String message;

    public PlatformException(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public PlatformException(PlatformExceptionEnum exceptionEnum){
        this(exceptionEnum.getCode(), exceptionEnum.getMsg());
    }
    public Integer getCode() {
        return code;
}
    @Override
    public String getMessage() {
        return message;
}
}
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值