最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot+Response如何統(tǒng)一返回result結(jié)果集

 更新時(shí)間:2024年05月17日 10:49:13   作者:螞蟻舞  
這篇文章主要介紹了SpringBoot+Response如何統(tǒng)一返回result結(jié)果集,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

SpringBoot+Response統(tǒng)一返回result結(jié)果集

在SpringBoot開(kāi)發(fā)接口中,通常會(huì)對(duì)java api統(tǒng)一返回result結(jié)果集,前端或者調(diào)用放可以根據(jù)返回的result結(jié)果集判斷請(qǐng)求得到的數(shù)據(jù)是否正確,是否有效,一般情況下,使用java自定義的result結(jié)果集封裝。

java統(tǒng)一返回?cái)?shù)據(jù)格式

Response.java

//import com.fasterxml.jackson.annotation.JsonInclude;
 
/**
 * 螞蟻舞
 */
//@JsonInclude(JsonInclude.Include.NON_NULL)
public class Response {
 
    private boolean state;
 
    private int code;
 
    private String msg;
 
    private Object data;
 
    private long timestamp;
 
    public Response() {}
 
    public Response(boolean state, int code, String msg) {
        this.state = state;
        this.code = code;
        this.msg = msg;
        this.timestamp = System.currentTimeMillis()/1000;
    }
 
    public Response(boolean state, int code, String msg, Object data) {
        this.state = state;
        this.code = code;
        this.msg = msg;
        this.data = data;
        this.timestamp = System.currentTimeMillis()/1000;
    }
 
    public boolean isState() {
        return state;
    }
 
    public void setState(boolean state) {
        this.state = state;
    }
 
    public int getCode() {
        return code;
    }
 
    public void setCode(int 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;
    }
 
    public long getTimestamp() {
        return timestamp;
    }
 
    public void setTimestamp(long timestamp) {
        this.timestamp = timestamp;
    }
 
    @Override
    public String toString() {
        return "Response{" +
                "state=" + state +
                ", code=" + code +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                ", timestamp=" + timestamp +
                '}';
    }
}

java返回結(jié)果統(tǒng)一封裝 靜態(tài)類

ResponseCode.java

/**
 * 螞蟻舞
 */
public class ResponseCode {
 
    private static final boolean STATE_TRUE = true;
 
    private static final boolean STATE_FALSE = false;
 
 
    private static final int CODE_200 = 200;     //操作資源成功
 
    private static final int CODE_201 = 201;     //資源為空
 
 
    private static final int CODE_100 = 100;     //操作資源失敗
 
    private static final int CORE_101 = 101;     //缺少必要參數(shù)
 
    private static final int CORE_102 = 102;     //參數(shù)無(wú)效返回
 
 
 
    private static final int CORE_303 = 303;     //請(qǐng)求token無(wú)效或者token失效到期  提示前端后,前端用戶可手動(dòng)刷新重新登陸
 
    private static final int CORE_304 = 304;     //請(qǐng)求token無(wú)效或者token失效到期  提示前端后,前端自動(dòng)跳轉(zhuǎn)到登錄頁(yè)面
 
    private static final int CORE_305 = 305;     //未攜帶token認(rèn)證信息,提示前端后,前端用戶可手動(dòng)刷新重新登陸
 
    private static final int CORE_306 = 306;     //未攜帶token認(rèn)證信息,提示前端后,前端自動(dòng)跳轉(zhuǎn)到登錄頁(yè)面
 
    private static final int CORE_307 = 307;     //未登錄  前端用戶可手動(dòng)跳轉(zhuǎn)到登錄頁(yè)面
 
    private static final int CORE_308 = 308;     //未登錄  前端自動(dòng)跳轉(zhuǎn)到登錄頁(yè)面
 
    private static final int CORE_400 = 400;    //全局異常
    private static final int CORE_600 = 600;    //您的權(quán)限不夠
 
    private static final int CORE_601 = 601;    //未經(jīng)授權(quán)不可訪問(wèn)
 
    private static final String MSG_ALL_SUCCESS = "操作資源成功";
 
    private static final String MSG_SELECT_SUCCESS = "獲取資源成功";
 
    private static final String MSG_UPDATE_SUCCESS = "更新資源成功";
 
    private static final String MSG_INSERT_SUCCESS = "新增資源成功";
 
    private static final String MSG_REMOVE_SUCCESS = "移除資源成功";
 
    private static final String MSG_DELETE_SUCCESS = "刪除資源成功";
 
    private static final String MSG_ALL_FAIL = "操作資源失敗";
 
    private static final String MSG_SELECT_FAIL = "獲取資源失敗";
 
    private static final String MSG_UPDATE_FAIL = "更新資源失敗";
 
    private static final String MSG_INSERT_FAIL = "新增資源失敗";
 
    private static final String MSG_REMOVE_FAIL = "移除資源失敗";
 
    private static final String MSG_DELETE_FAIL = "刪除資源失敗";
 
    private static final String MSG_RESOURCES_EMPTY = "資源為空";
 
    private static final String MSG_PARAMETER_LACK = "缺少必要參數(shù)";
 
    private static final String MSG_PARAMETER_INVALID = "參數(shù)無(wú)效";
 
    private static final String MSG_EXCEPTION_GLOBAL = "操作異常,請(qǐng)重新嘗試";
 
    private static final String MSG_TOKEN_INVALID = "請(qǐng)求token無(wú)效或者token失效到期";
 
    private static final String MSG_TOKEN_INVALID_SKIP = "請(qǐng)求token無(wú)效或者token失效到期,自動(dòng)跳轉(zhuǎn)登錄頁(yè)";
 
    private static final String MSG_TOKEN_NO_AUTH = "未攜帶token認(rèn)證信息,請(qǐng)重新登陸";
 
    private static final String MSG_TOKEN_NO_AUTH_SKIP = "未攜帶token認(rèn)證信息,請(qǐng)重新登陸, 自動(dòng)跳轉(zhuǎn)到登錄頁(yè)";
 
    private static final String MSG_TOKEN_NO_LOGIN = "未登錄,請(qǐng)登錄";
 
    private static final String MSG_TOKEN_NO_LOGIN_SKIP = "未登錄,請(qǐng)登錄 自動(dòng)跳轉(zhuǎn)到登錄頁(yè)";
 
    private static final String MSG_TOKEN_NO_PERMISSION  = "未經(jīng)授權(quán)的不可訪問(wèn)";
 
    private static final String MSG_TOKEN_NOT_PERMISSION = "您的權(quán)限不足";
 
 
 
    /**
     * 未登錄,請(qǐng)登錄
     */
    public static Response noLoginResponse(){
        return new Response(STATE_FALSE,CORE_307,MSG_TOKEN_NO_LOGIN);
    }
 
    public static Response noLoginResponse(String msg){
        return new Response(STATE_FALSE,CORE_307,msg);
    }
 
    public static Response noLoginSkipResponse(){
        return new Response(STATE_FALSE,CORE_308,MSG_TOKEN_NO_LOGIN_SKIP);
    }
 
    public static Response noLoginSkipResponse(String msg){
        return new Response(STATE_FALSE,CORE_308,msg);
    }
 
 
    //  未攜帶token認(rèn)證信息,請(qǐng)重新登陸
    public static Response noAuthHeaderTokenResponse(){
        return new Response(STATE_FALSE,CORE_305,MSG_TOKEN_NO_AUTH);
    }
 
    public static Response noAuthHeaderTokenResponse(String msg){
        return new Response(STATE_FALSE,CORE_305,msg);
    }
 
    //  未攜帶token認(rèn)證信息,提示前端后,前端自動(dòng)跳轉(zhuǎn)到登錄頁(yè)面
    public static Response noAuthHeaderTokenSkipResponse(){
        return new Response(STATE_FALSE,CORE_306,MSG_TOKEN_NO_AUTH_SKIP);
    }
 
    public static Response noAuthHeaderTokenSkipResponse(String msg){
        return new Response(STATE_FALSE,CORE_306,msg);
    }
 
 
    //  請(qǐng)求token無(wú)效或者token失效到期
    public static Response invalidHeaderTokenResponse(){
        return new Response(STATE_FALSE,CORE_303,MSG_TOKEN_INVALID);
    }
 
    public static Response invalidHeaderTokenResponse(String msg){
        return new Response(STATE_FALSE,CORE_303,msg);
    }
 
    //  請(qǐng)求token無(wú)效或者token失效到期  前端可根據(jù)此項(xiàng)code跳轉(zhuǎn)到登錄頁(yè)
    public static Response invalidHeaderTokenSkipResponse(){
        return new Response(STATE_FALSE,CORE_304,MSG_TOKEN_INVALID_SKIP);
    }
 
    public static Response invalidHeaderTokenSkipResponse(String msg){
        return new Response(STATE_FALSE,CORE_304,msg);
    }
 
 
    //  全局異常返回
    public static Response exceptionResponse(){
        return new Response(STATE_FALSE,CORE_400,MSG_EXCEPTION_GLOBAL);
    }
 
    public static Response exceptionResponse(String msg){
        return new Response(STATE_FALSE,CORE_400,msg);
    }
 
    //  您的權(quán)限不足
    public static Response notPermissionResponse(){
        return new Response(STATE_FALSE,CORE_600,MSG_TOKEN_NOT_PERMISSION);
    }
 
    public static Response notPermissionResponse(String msg){
        return new Response(STATE_FALSE,CORE_600,msg);
    }
 
    //  未經(jīng)授權(quán)的不可訪問(wèn)
    public static Response unauthorizedPermissionResponse(){
        return new Response(STATE_FALSE,CORE_601,MSG_TOKEN_NO_PERMISSION);
    }
 
    public static Response unauthorizedPermissionResponse(String msg){
        return new Response(STATE_FALSE,CORE_601,msg);
    }
 
 
    //  缺少必要參數(shù)返回
    public static Response lackParameterResponse(){
        return new Response(STATE_FALSE, CORE_101, MSG_PARAMETER_LACK);
    }
 
    public static Response lackParameterResponse(String msg){
        return new Response(STATE_FALSE, CORE_101, msg);
    }
 
 
    //  參數(shù)無(wú)效通用返回
    public static Response invalidParameterResponse(){
        return new Response(STATE_FALSE, CORE_102, MSG_PARAMETER_INVALID);
    }
 
    public static Response invalidParameterResponse(String msg){
        return new Response(STATE_FALSE, CORE_102, msg);
    }
 
 
    //  新增成功返回
    public static Response successInsertResponse(){
        return new Response(STATE_TRUE,CODE_200,MSG_INSERT_SUCCESS);
    }
 
    public static Response successInsertResponse(Object data){
        return new Response(STATE_TRUE,CODE_200,MSG_INSERT_SUCCESS,data);
    }
 
 
    //  更新成功返回
    public static Response successUpdateResponse(){
        return new Response(STATE_TRUE,CODE_200,MSG_UPDATE_SUCCESS);
    }
 
 
    //  查詢成功返回
    public static Response successSelectResponse(){
        return new Response(STATE_TRUE,CODE_200,MSG_SELECT_SUCCESS);
    }
 
    public static Response successSelectResponse(Object data){
        return new Response(STATE_TRUE, CODE_200, MSG_SELECT_SUCCESS, data);
    }
 
 
    //  移除成功返回
    public static Response successRemoveResponse(){
        return new Response(STATE_TRUE,CODE_200,MSG_REMOVE_SUCCESS);
    }
 
 
    //  刪除成功返回
    public static Response successDeleteResponse(){
        return new Response(STATE_TRUE,CODE_200,MSG_DELETE_SUCCESS);
    }
 
 
    //  通用success返回
    public static Response successResponse(){
        return new Response(STATE_TRUE,CODE_200,MSG_ALL_SUCCESS);
    }
 
    public static Response successResponse(String msg){
        return new Response(STATE_TRUE,CODE_200,msg);
    }
 
    public static Response successResponse(Object data){
        return new Response(STATE_TRUE,CODE_200,MSG_ALL_SUCCESS, data);
    }
 
    public static Response successResponse(String msg, Object data){
        return new Response(STATE_TRUE,CODE_200,msg, data);
    }
 
    //  查詢結(jié)果為空時(shí)成功返回(沒(méi)有獲取到數(shù)據(jù))
    public static Response successEmptyResponse(){
        return new Response(STATE_TRUE,CODE_201,MSG_RESOURCES_EMPTY);
    }
 
    public static Response successEmptyResponse(String msg){
        return new Response(STATE_TRUE,CODE_201,msg);
    }
 
    public static Response successEmptyResponse(Object data){
        return new Response(STATE_TRUE,CODE_201,MSG_RESOURCES_EMPTY,data);
    }
 
 
    //  新增失敗返回
    public static Response failInsertResponse(){
        return new Response(STATE_FALSE,CODE_100,MSG_INSERT_FAIL);
    }
 
    public static Response failInsertResponse(String msg){
        return new Response(STATE_FALSE,CODE_100,msg);
    }
 
 
    //  更新失敗返回
    public static Response failUpdateResponse(){
        return new Response(STATE_FALSE,CODE_100,MSG_UPDATE_FAIL);
    }
 
    public static Response failUpdateResponse(String msg){
        return new Response(STATE_FALSE,CODE_100,msg);
    }
 
 
    //  查詢失敗返回
    public static Response failSelectResponse(){
        return new Response(STATE_FALSE,CODE_100,MSG_SELECT_FAIL);
    }
 
    public static Response failSelectResponse(String msg){
        return new Response(STATE_FALSE,CODE_100,msg);
    }
 
 
    //  移除失敗返回
    public static Response failRemoveResponse(){
        return new Response(STATE_FALSE,CODE_100,MSG_REMOVE_FAIL);
    }
 
    public static Response failRemoveResponse(String msg){
        return new Response(STATE_FALSE,CODE_100,msg);
    }
 
 
    //  刪除失敗返回
    public static Response failDeleteResponse(){
        return new Response(STATE_FALSE,CODE_100,MSG_DELETE_FAIL);
    }
 
    public static Response failDeleteResponse(String msg){
        return new Response(STATE_FALSE,CODE_100,msg);
    }
 
 
    //  通用fail返回
    public static Response failResponse(){
        return new Response(STATE_FALSE,CODE_100,MSG_ALL_FAIL);
    }
 
    public static Response failResponse(String msg){
        return new Response(STATE_FALSE,CODE_100,msg);
    }
 
    public static Response failResponse(String msg, Object data){
        return new Response(STATE_FALSE,CODE_100,msg,data);
    }
 
 
    //  自定義返回結(jié)果
    public static Response customizeResponse(boolean state, int code, String msg){
        return new Response(state,code,msg);
    }
 
    public static Response customizeResponse(boolean state, int code, String msg, Object data){
        return new Response(state, code, msg, data);
    }
 
}

springboot result統(tǒng)一的結(jié)果集處理

1 url的命名

在實(shí)際開(kāi)發(fā)中名詞居多,見(jiàn)名知意

  • get 獲取數(shù)據(jù)
  • post 添加數(shù)據(jù)
  • put 修改數(shù)據(jù)
  • delete 邏輯假刪除

2 返回?cái)?shù)據(jù)的格式

2.1 一般返回的是json數(shù)據(jù) {狀態(tài)碼: 信息}

**一些常用的返回狀態(tài)碼 **

2.2 直接在Controller中調(diào)用靜態(tài)方法

  • 2.2.1 先創(chuàng)建一個(gè)返回集的接口
public interface Result<T> {

}
  • 2.2.2 定義返回信息枚舉類型
public enum StatusTypeEnum {
    /**
     * 200為成功
     * 404為錯(cuò)誤信息
     */
    SUCCESS(200,"success"),
    ERROR(404,"error");

    private String msg;
    private int status;

    StatusTypeEnum(int status, String msg) {
        this.status = status;
        this.msg = msg;
    }
}

  • 2.2.3 創(chuàng)建successResult返回集繼承返回集接口
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SuccessResult<T> implements Result<T> {
    private StatusTypeEnum status;
    private T data;

    public static SuccessResult succes() {
        return new SuccessResult<>(StatusTypeEnum.SUCCESS, null);
    }

    public static <T> SuccessResult succes(T data) {
        return new SuccessResult<>(StatusTypeEnum.SUCCESS, data);
    }

}
  • 2.2.4 創(chuàng)建errorResult返回集繼承返回集接口
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ErrorResult implements Result {
    private StatusTypeEnum status;
    private String msg;
    

    public static ErrorResult error(int status, Exception ex) {
        return new ErrorResult(StatusTypeEnum.ERROR, ex.getMessage());
    }
    public static ErrorResult error() {
        return new ErrorResult(StatusTypeEnum.ERROR, "錯(cuò)誤");
    }

}

定義的內(nèi)容需要根據(jù)業(yè)務(wù)不同來(lái)定,這個(gè)只是大體架構(gòu)

2.3 利用AOP切面變成

@RestControllerAdvice + 實(shí)現(xiàn)ResponseBodyAdvice

將Result 封裝到aop 中, Controller層 直接返回 參數(shù),讓aop去判斷,返回的Result

@RestControllerAdvice
@Slf4j
public class GlobalResultAdvice  implements ResponseBodyAdvice {
    @Override
    public boolean supports(MethodParameter returnType, Class converterType) {
        log.error("supports");
        //為false 將不執(zhí)行下面的aop方法
        return true;
    }

    /**
     *
     * @param body
     * @param returnType
     * @param selectedContentType
     * @param selectedConverterType
     * @param request
     * @param response
     * @return
     */
    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
        Object resp = null;
        if (body instanceof SuccessResult){
            resp = body;
        }else{
            resp =  SuccessResult.succes(body);
        }

        return resp;
    }

}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • idea?git提交代碼時(shí),特別慢的解決方案

    idea?git提交代碼時(shí),特別慢的解決方案

    IDEA提交代碼變慢因執(zhí)行代碼分析和TODO檢查,解決方法為關(guān)閉相關(guān)選項(xiàng)并重啟IDE,可提升提交效率
    2025-09-09
  • maven為MANIFEST.MF文件添加內(nèi)容的方法

    maven為MANIFEST.MF文件添加內(nèi)容的方法

    這篇文章主要介紹了maven為MANIFEST.MF文件添加內(nèi)容的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Struts之logic標(biāo)簽庫(kù)詳解

    Struts之logic標(biāo)簽庫(kù)詳解

    本文就Struts之logic標(biāo)簽庫(kù)進(jìn)行詳細(xì)介紹,需要的朋友可以參考下
    2012-11-11
  • 使用idea和gradle編譯spring5源碼的方法步驟

    使用idea和gradle編譯spring5源碼的方法步驟

    這篇文章主要介紹了詳解使用idea和gradle編譯spring5源碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • SpringBoot實(shí)現(xiàn)自定義指標(biāo)監(jiān)控功能

    SpringBoot實(shí)現(xiàn)自定義指標(biāo)監(jiān)控功能

    本文主要介紹了SpringBoot實(shí)現(xiàn)自定義指標(biāo)監(jiān)控功能的實(shí)現(xiàn),,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,感興趣的小伙伴跟著著小編來(lái)一起來(lái)學(xué)習(xí)吧
    2024-01-01
  • Java檢測(cè)線程中斷狀態(tài)的方法示例

    Java檢測(cè)線程中斷狀態(tài)的方法示例

    這篇文章主要介紹了Java檢測(cè)線程中斷狀態(tài)的方法,結(jié)合實(shí)例形式分析了java針對(duì)線程中斷狀態(tài)檢測(cè)的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-10-10
  • IDEA中Git多次Commit合并為一次提交實(shí)現(xiàn)過(guò)程

    IDEA中Git多次Commit合并為一次提交實(shí)現(xiàn)過(guò)程

    因習(xí)慣分多次提交導(dǎo)致零碎,需合并,可通過(guò)IDEA Git插件,創(chuàng)建新分支,選中提交后Squash并編輯message,最后push完成
    2025-09-09
  • MacOS如何安裝配置多個(gè)JDK并切換使用詳解

    MacOS如何安裝配置多個(gè)JDK并切換使用詳解

    這篇文章主要介紹了如何在MacOS上安裝和配置多個(gè)JDK版本,通過(guò)配置環(huán)境變量來(lái)實(shí)現(xiàn),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02
  • MyBatis高級(jí)映射學(xué)習(xí)教程

    MyBatis高級(jí)映射學(xué)習(xí)教程

    這篇文章主要介紹了MyBatis高級(jí)映射學(xué)習(xí)教程的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • Java實(shí)現(xiàn)讀取CSV文件并將數(shù)據(jù)放入對(duì)象

    Java實(shí)現(xiàn)讀取CSV文件并將數(shù)據(jù)放入對(duì)象

    CSV文件是一種常見(jiàn)的數(shù)據(jù)存儲(chǔ)格式,廣泛應(yīng)用于數(shù)據(jù)交換,日志記錄和表格數(shù)據(jù)處理,在Java開(kāi)發(fā)中,讀取CSV文件并將數(shù)據(jù)映射到對(duì)象中是常見(jiàn)的需求,本文將詳細(xì)介紹幾種常見(jiàn)方法,有需要的可以了解下
    2025-06-06

最新評(píng)論

响水县| 南涧| 城市| 永定县| 和田县| 德令哈市| 台湾省| 凤庆县| 株洲县| 北辰区| 慈溪市| 根河市| 望江县| 库车县| 鹤庆县| 灵川县| 江孜县| 台安县| 南江县| 连平县| 通海县| 石渠县| 来凤县| 贵德县| 平顺县| 汕尾市| 卢氏县| 中方县| 黄浦区| 南乐县| 石城县| 湘西| 康马县| 霍林郭勒市| 浦县| 福清市| 兴海县| 比如县| 桃源县| 西贡区| 琼海市|