国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

前后端分離項(xiàng)目 — Java后臺(tái)統(tǒng)一錯(cuò)誤消息處理

rockswang / 769人閱讀

摘要:前言一般我們后臺(tái)出錯(cuò)報(bào)都是直接拋出來的,但是微信公眾號(hào),或者支付寶支付等等,他們的異常都有錯(cuò)誤碼對(duì)應(yīng)錯(cuò)誤信息,他們是如何根據(jù)錯(cuò)誤信息展示對(duì)應(yīng)的錯(cuò)誤碼提供給前端的呢,這也就是我們要說的統(tǒng)一錯(cuò)誤消息處理機(jī)制。

1、前言

一般我們后臺(tái)出錯(cuò)報(bào)Exception都是直接拋出來的,但是微信公眾號(hào),或者支付寶支付等等,他們的異常都有錯(cuò)誤碼對(duì)應(yīng)錯(cuò)誤信息,他們是如何根據(jù)錯(cuò)誤信息展示對(duì)應(yīng)的錯(cuò)誤碼提供給前端的呢,這也就是我們要說的統(tǒng)一錯(cuò)誤消息處理機(jī)制。

2、Java實(shí)現(xiàn)

首先創(chuàng)建一個(gè)Result類,這個(gè)類作用是設(shè)置消息碼以及消息文本還有消息數(shù)據(jù),如下所示

package com.xfind.util.result;

public class Result {
    private int code;
    private String message;
    private T data;

    public Result(){

    }

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

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

    public int getCode() {
        return code;
    }

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

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getData() {
        return data;
    }

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

設(shè)置之后 ,我們接下來再創(chuàng)建一個(gè)ResultCode類,這個(gè)類的作用是具體的消息碼和消息,如下所示:

package com.xfind.util.result;

/**
 * 異常處理狀態(tài)碼
 */
public enum ResultCode {

    SUCCESS(0, "請(qǐng)求成功"),
    Unknown_Exception(-1, "未知異常"),

    USER_NOT_FOUND(10001, "沒有找到此用戶"),
    USERNAME_NOT_BLANK(10002, "用戶名不能為空"),
    USERNAME_EXIST(10003, "用戶名已經(jīng)存在"),
    USERTYPE_ERROR(100031, "用戶類型不正確"),
    PHONE_WROND(10004, "手機(jī)號(hào)不正確"),
    SMS_CODE_ERROR(10007, "手機(jī)驗(yàn)證碼不正確"),
    PHONE_EXIST(10008, "手機(jī)號(hào)已經(jīng)存在"),
    USER_EMPTY_EXCEPTION(10009, "用戶名、手機(jī)號(hào)或者郵箱為空"),
    USER_TOKEN_EXCEPTION(10010, "從TOKEN中未查到相關(guān)用戶信息"),
    USERNAME_PASSWORD_EXCEPTION(10011, "用戶名或者密碼錯(cuò)誤"),

    EMAIL_SERVER_ECCEPTION(10012, "阿里云郵件服務(wù)端出錯(cuò)"),
    EMAIL_CLIENT_ECCEPTION(10013, "阿里云郵件客戶端出錯(cuò)"),
    EMAIL_SEND_ECCEPTION(10014, "阿里云郵件發(fā)送出錯(cuò)"),
    EMAIL_WROND(10015, "郵箱不正確"),
    EMAIL_CODE_WROND(10016, "郵箱驗(yàn)證碼不正確"),
    EMAIL_EXIST(10017, "郵箱已經(jīng)存在"),

    LOGIN_METHOD_WROND(10018, "登錄方式不正確"),
    CODE_EMPTY(10019, "驗(yàn)證碼不為空"),
    PASSWORD_EMPTY(10020, "密碼不為空"),
    TOKEN_EXCEPTION(10021, "TOKEN認(rèn)證出錯(cuò)"),

    USER_AUTH_FAILD(10022, "用戶認(rèn)證失敗"),

    USER_ACCESS_DENIED(10023, "用戶無權(quán)限登錄"),

    CODE_SEND_FAILD(10030, "驗(yàn)證碼發(fā)送失敗"),

    ACTION_MONGODB_ERROR(10100, "操作MONGODB數(shù)據(jù)庫出錯(cuò)"),
    OPERATION_TOO_FREQUENT(10101, "請(qǐng)求過于頻繁,請(qǐng)稍候再試"),

    GOLD_COINS_INSUFFICIENT(10025,"金幣余額不足"),
    CODE_EXIST(10023,"編號(hào)已存在"),
    TESTCODE_EXIST(10033,"答題碼已存在"),
    TESTCODE_NOEXIST(10034,"答題碼不存在"),
    TESTCODE_ERROR(10036,"提交數(shù)已達(dá)上限"),
    TESTCENTER_NOEXIST(10035,"測試題不存在"),
    NAME_EXIST(10024,"名稱已存在"),
    NOT_EXIST_EMAIL(10025,"該企業(yè)用戶沒有分配郵箱"),
    MAIL_REACH_MAX(10026,"達(dá)到收取郵箱上限"),
    MAIL_NEW_NOTEXIST(10027,"郵箱中沒有可導(dǎo)入的簡歷"),
    PWD_CONFIRM_ERROR(10029,"兩次密碼不一致"),
    PWD_ERROR(10030,"密碼不正確"),
    ENTER_OR_TALENT_NOT_EXITS(10028,"企業(yè)或人才庫簡歷不存在"),
    PHONE_EMPTY(10031, "手機(jī)號(hào)不能為空"),
    EMAIL_EMPTY(10032, "郵箱不能為空"),
    NO_USABLE_MAIL(10040,"沒有可用郵箱"),

    REQUESTRECORD_EXIST(10050,"簡歷已投遞"),
    TALENTRESERVER_EXIST(10051,"簡歷已存在于人才儲(chǔ)備庫中,請(qǐng)勿重復(fù)添加"),

    DEVICE_ID_EMPTY(10052,"設(shè)備ID:deviceId不能為空"),
    DELETE_CONNECT_ERROR(10053,"刪除connect出錯(cuò)");

    private int code;
    private String message;

    ResultCode(int code, String message) {
        this.code = code;
        this.message = message;
    }

    public int getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
}

好了,有了Result和ResultCode類,我們就可以來編寫異常并返回給前端了,不過在這之前我們還要?jiǎng)?chuàng)建兩個(gè)類:DomainException和SuccessResult,

package com.xfind.exception;

import com.xfind.util.result.ResultCode;

public class DomainException extends RuntimeException {
    private int errCode = ResultCode.Unknown_Exception.getCode();

    public DomainException() {
        super(ResultCode.Unknown_Exception.getMessage());
    }

    public DomainException(ResultCode resultCode) {
        super(resultCode.getMessage());
        this.errCode = resultCode.getCode();
    }

    public int getErrCode() {
        return errCode;
    }

    public void setErrCode(int errCode) {
        this.errCode = errCode;
    }
}

DomainException的作用是要拋出的異常類,從代碼中可以看出它是繼承RuntimeException類的,所以可以使用throw new DomainException(ResultCode.XX);這樣就可以拋到前端。

package com.xfind.util.result;


public class SuccessResult extends Result {
    public SuccessResult(){

    }

    public SuccessResult(T data) {
        super(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(), data);
    }
}

這個(gè)類的作用是輔助類,把Code和Message都封裝到這個(gè)類,就可以直接返回到前端了。

3、設(shè)置統(tǒng)一異常處理

我們再添加一個(gè)GlobalExceptionHandler類,來處理每個(gè)拋出DomainException類返回的數(shù)據(jù),前返回Result給前端了,如下所示:

/**
 * 統(tǒng)一異常處理
 */
@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(value = DomainException.class)
    public Result domainExceptionHandler(HttpServletRequest req,
                                         DomainException e) throws Exception {
        e.printStackTrace();
        Result result = new Result(e.getErrCode(), e.getMessage());
        return result;
    }
}
4、測試

現(xiàn)在我們編寫一個(gè)類來測試我們剛剛寫的類的運(yùn)行情況,如下所示

@GetMapping("/isRegister")
    public ResponseEntity isRegister(@RequestParam String user) {
        boolean has_phone = smsService.isExist(user);
        if (has_phone) {
            throw new DomainException(ResultCode.PHONE_EXIST);
        }

        boolean has_email = emailService.isExist(user);
        if (has_email) {
            throw new DomainException(ResultCode.EMAIL_EXIST);
        }
        String str = "該手機(jī)號(hào)或者郵箱沒有被注冊,可以注冊本系統(tǒng)";
        Result result = new SuccessResult<>(str);
        return ResponseEntity.ok(result);
    }

該方法是判斷用戶是否已經(jīng)被注冊,方法里面先判斷是否有相同手機(jī)或者郵箱,如果有就招聘異常給前端,否則則返回正確信息給前端,我們使用POSTMan來測試下
1)首先我們輸入一個(gè)已經(jīng)存在的手機(jī)號(hào)

2)我們再輸入一個(gè)已經(jīng)存在的郵箱

3)我們再輸入一個(gè)不存在存在的手機(jī)

5、總結(jié)

1、首先建立一個(gè)錯(cuò)誤碼和錯(cuò)誤消息類,然后再把消息返回,返回的時(shí)候要設(shè)置成JSON拋給前端
2、我這里的消息碼使用的是int,你也可以設(shè)置成String,這個(gè)看你需求了

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/77359.html

相關(guān)文章

  • 2014 杭JS大會(huì) 會(huì)議盛況與技術(shù)熱點(diǎn)現(xiàn)場報(bào)道(直播)

    摘要:中國開發(fā)者的年度盛會(huì)中國開發(fā)者大會(huì),于年月日在杭州舉辦了本年度的杭會(huì)議我們的和將為在現(xiàn)場為您帶來現(xiàn)場的報(bào)道,一覽大牛風(fēng)采,直擊技術(shù)熱點(diǎn)。簽到中第日的會(huì)議即將開幕以下是與參會(huì)者和與博文視點(diǎn)的作者們合影 中國JS開發(fā)者的年度盛會(huì)JS中國開發(fā)者大會(huì),于2014年6月21日在杭州舉辦了本年度的杭JS會(huì)議! 我們SegmentFault的 @integ 和 @shamiao 將為在現(xiàn)場為您帶來...

    caige 評(píng)論0 收藏0
  • 兩年了,我寫了這些干貨!

    摘要:開公眾號(hào)差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來越多時(shí),大家搜索起來就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章系列處理登錄請(qǐng)求前后端分離一使用完美處理權(quán)限問題前后端分離二使用完美處理權(quán)限問題前后端分離三中密碼加鹽與中異常統(tǒng)一處理 開公眾號(hào)差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來越多時(shí),大家搜索起來就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章! Spring Boo...

    huayeluoliuhen 評(píng)論0 收藏0
  • 前后分離的問題與解決方案

    摘要:版本升級(jí)每個(gè)文件方法頭標(biāo)明版本號(hào),每次修改需修改版本號(hào)大于原版本號(hào),即為版本升級(jí)。 這些天項(xiàng)目有的API出現(xiàn)版本控制問題,著實(shí)忙乎了一小陣,因?yàn)轫?xiàng)目使用TP5的傳統(tǒng)方法進(jìn)行版本控制(api目錄下進(jìn)行版本區(qū)分,由請(qǐng)求路徑?jīng)Q定使用的版本) showImg(https://segmentfault.com/img/bVbekSM?w=200&h=128); 但是問題往往是,項(xiàng)目使用了v2版本...

    zilu 評(píng)論0 收藏0
  • Spring Boot + Vue 前后分離開發(fā),前網(wǎng)絡(luò)請(qǐng)求封裝與配置

    摘要:今天松哥就帶大家來看看的使用。此時(shí)啟動(dòng)前端項(xiàng)目,就可以順利發(fā)送網(wǎng)絡(luò)請(qǐng)求了。松哥將自己封裝的網(wǎng)絡(luò)請(qǐng)求庫已經(jīng)放在上,歡迎大家參考。前端網(wǎng)絡(luò)訪問,主流方案就是 Ajax,Vue 也不例外,在 Vue2.0 之前,網(wǎng)絡(luò)訪問較多的采用 vue-resources,Vue2.0 之后,官方不再建議使用 vue-resources ,這個(gè)項(xiàng)目本身也停止維護(hù),目前建議使用的方案是 axios。今天松哥就帶大...

    Ku_Andrew 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<