1. 程式人生 > 其它 >全域性異常處理統一介面返回

全域性異常處理統一介面返回

技術標籤:後端開發java

建立統一返回結果類

@Data
public class Result implements Serializable {
    private Boolean success;

    private Integer code;

    private String msg;

    private Object data;

    // 構造器私有
    private Result(){}

    // 通用返回成功
    public static Result ok() {
        Result r = new Result();
        r.setSuccess(ResultCodeEnum.SUCCESS.getSuccess());
        r.setCode(ResultCodeEnum.SUCCESS.getCode());
        r.setMsg(ResultCodeEnum.SUCCESS.getMessage());
        return r;
    }

    // 通用返回失敗,未知錯誤
    public static Result error() {
        Result r = new Result();
        r.setSuccess(ResultCodeEnum.UNKNOWN_ERROR.getSuccess());
        r.setCode(ResultCodeEnum.UNKNOWN_ERROR.getCode());
        r.setMsg(ResultCodeEnum.UNKNOWN_ERROR.getMessage());
        return r;
    }

    // 設定結果,形參為結果列舉
    public static Result setResult(ResultCodeEnum result) {
        Result r = new Result();
        r.setSuccess(result.getSuccess());
        r.setCode(result.getCode());
        r.setMsg(result.getMessage());
        return r;
    }

    /**------------使用鏈式程式設計,返回類本身-----------**/

    // 自定義返回資料
    public Result data(Object o) {
        this.setData(o);
        return this;
    }

    // 自定義狀態資訊
    public Result message(String message) {
        this.setMsg(message);
        return this;
    }

    // 自定義狀態碼
    public Result code(Integer code) {
        this.setCode(code);
        return this;
    }

    // 自定義返回結果
    public Result success(Boolean success) {
        this.setSuccess(success);
        return this;
    }

    //返回json
    public Object toJSON(){
       return JSONObject.toJSON(this);
    }
}

建立結果狀態列舉類

/**
 * 統一結果返回標誌
 */
@Getter
public enum  ResultCodeEnum {
    SUCCESS(true,200,"成功"),

    UNKNOWN_ERROR(false,500,"內部錯誤,請聯絡管理員"),

    PARAM_ERROR(false,501,"引數錯誤");

    // 響應是否成功
    private Boolean success;
    // 響應狀態碼
    private Integer code;
    // 響應資訊
    private String message;

    ResultCodeEnum(boolean success, Integer code, String message) {
        this.success = success;
        this.code = code;
        this.message = message;
    }
}

使用ControllerAdvice註解

具體異常可繼續新增

@ControllerAdvice
public class RestCtrlExceptionHandler {


    @ExceptionHandler(Exception.class)
    @ResponseBody
    public Result handleException(Exception e){
        return Result.error().code(500).message(e.getMessage()+",內部異常,請聯絡管理員");
    }
}

然後controller層返回結果的時候不用在寫tryCatch了 ,返回結果的時候也用Result封裝一下,起碼這樣返回給其他平臺呼叫的時候格式統一,但凡服務出問題也不至於把本地的異常拋給下游

示例返回

     return Result.ok().data(array_data);