欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot返回結(jié)果統(tǒng)一處理實例詳解

 更新時間:2023年12月10日 17:33:05   作者:wx59bcc77095d22  
這篇文章主要為大家介紹了SpringBoot返回結(jié)果統(tǒng)一處理實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、前言

在Web開發(fā)中,我們常常需要對API接口的返回結(jié)果進(jìn)行統(tǒng)一的包裝,以方便客戶端對數(shù)據(jù)和異常情況的統(tǒng)一處理。我們可以自定義返回接口結(jié)果包裝類。

二、創(chuàng)建返回結(jié)果枚舉類

package com.example.hellodemo.enums;
/**
 * @author qx
 * @date 2023/11/30
 * @des 返回結(jié)果枚舉類
 */
public enum ResultTypeEnum {
    SUCCESS(0, "成功"), FAILURE(1, "失敗");
    private final int code;
    private final String msg;
    ResultTypeEnum(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    public int getCode() {
        return code;
    }
    public String getMsg() {
        return msg;
    }
}

三、定義統(tǒng)一返回結(jié)果類

package com.example.hellodemo.bean;
import com.example.hellodemo.enums.ResultTypeEnum;
import java.io.Serializable;
/**
 * @author qx
 * @date 2023/11/30
 * @des 統(tǒng)一返回結(jié)果類
 */
public class ResultResponse<T> implements Serializable {
    private int code;
    private String msg;
    private T data;
    public ResultResponse(int code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    public static <T> ResultResponse success() {
        return new ResultResponse(ResultTypeEnum.SUCCESS.getCode(), ResultTypeEnum.SUCCESS.getMsg(), null);
    }
    public static <T> ResultResponse success(T data) {
        return new ResultResponse(ResultTypeEnum.SUCCESS.getCode(), ResultTypeEnum.SUCCESS.getMsg(), data);
    }
    public static <T> ResultResponse success(String msg, T data) {
        return new ResultResponse(ResultTypeEnum.SUCCESS.getCode(), msg, data);
    }
    public static ResultResponse failure() {
        return new ResultResponse(ResultTypeEnum.FAILURE.getCode(), ResultTypeEnum.FAILURE.getMsg(), null);
    }
    public static ResultResponse failure(String msg) {
        return new ResultResponse(ResultTypeEnum.FAILURE.getCode(), msg, null);
    }
    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 T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }
}

四、創(chuàng)建控制器

package com.example.hellodemo.controller;
import com.example.hellodemo.bean.ResultResponse;
import com.example.hellodemo.bean.one.DbOneEntity;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
/**
 * @author qx
 * @date 2023/11/30
 * @des
 */
@RestController
public class DbController {
    @PostMapping("/test")
    public ResultResponse<Map<String, Object>> testDemo(@RequestParam String name, @RequestParam Integer id) {
        Map<String, Object> hashMap = new HashMap<>();
        hashMap.put("name", name);
        hashMap.put("id", id);
        return ResultResponse.success(hashMap);
    }
}

測試:

我們也可以返回自定義的msg。

package com.example.hellodemo.controller;
import com.example.hellodemo.bean.ResultResponse;
import com.example.hellodemo.bean.one.DbOneEntity;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
/**
 * @author qx
 * @date 2023/11/30
 * @des
 */
@RestController
public class DbController {
    @PostMapping("/test")
    public ResultResponse<Map<String, Object>> testDemo(@RequestParam String name, @RequestParam Integer id) {
        Map<String, Object> hashMap = new HashMap<>();
        hashMap.put("name", name);
        hashMap.put("id", id);
        return ResultResponse.success("獲取數(shù)據(jù)成功",hashMap);
    }
}

測試:

五、全局異常統(tǒng)一返回類

package com.example.hellodemo.exception;
import com.example.hellodemo.bean.ResultResponse;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
 * @author qx
 * @date 2023/11/30
 * @des 全局異常統(tǒng)一返回處理類
 */
@RestControllerAdvice
public class GlobalExceptionHandler {
    /**
     * 捕獲Exceptino異常類型
     *
     * @param e
     * @return 返回異常統(tǒng)一返回處理結(jié)果
     */
    @ExceptionHandler(value = {Exception.class})
    public ResultResponse exceptionHandler(Exception e) {
        return ResultResponse.failure(e.getMessage());
    }
}

我們在控制器中自己創(chuàng)建一個異常,然后請求接口,看看返回什么?

package com.example.hellodemo.controller;
import com.example.hellodemo.bean.ResultResponse;
import com.example.hellodemo.bean.one.DbOneEntity;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
/**
 * @author qx
 * @date 2023/11/30
 * @des
 */
@RestController
public class DbController {
    @PostMapping("/test")
    public ResultResponse<Map<String, Object>> testDemo(@RequestParam String name, @RequestParam Integer id) {
        Map<String, Object> hashMap = new HashMap<>();
        hashMap.put("name", name);
        hashMap.put("id", id);
        // 自己寫一個異常
        int i = 1 / 0;
        return ResultResponse.success("獲取數(shù)據(jù)成功", hashMap);
    }
}

測試:

我們看到msg已經(jīng)返回了異常的相關(guān)信息。

六、Spring切面實現(xiàn)自動返回統(tǒng)一結(jié)果

package com.example.hellodemo.config;
import com.example.hellodemo.bean.ResultResponse;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
/**
 * @author qx
 * @date 2023/11/30
 * @des 全局統(tǒng)一返回結(jié)果
 */
@RestControllerAdvice
public class GlobalResponseAdvice implements ResponseBodyAdvice<Object> {
    @Override
    public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {
        return true;
    }
    @Override
    public Object beforeBodyWrite(Object body, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
        // 要排除的api,里面的接口不需要統(tǒng)一包裝
        String[] excludePath = {};
        for (String path : excludePath) {
            if (serverHttpRequest.getURI().getPath().startsWith(path)) {
                return body;
            }
        }
        if (body instanceof ResultResponse) {
            return body;
        }
        return ResultResponse.success(body);
    }
}

我們定義一個不帶返回格式的控制器。

package com.example.hellodemo.controller;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
/**
 * @author qx
 * @date 2023/11/30
 * @des
 */
@RestController
public class DbController {
    @PostMapping("/test")
    public Map<String, Object> testDemo(@RequestParam String name, @RequestParam Integer id) {
        Map<String, Object> hashMap = new HashMap<>();
        hashMap.put("name", name);
        hashMap.put("id", id);
        return hashMap;
    }
}

我們進(jìn)行測試:

我們發(fā)現(xiàn)我們使用切面設(shè)置統(tǒng)一返回結(jié)果的封裝成功了,這樣就統(tǒng)一了返回格式,對代碼沒有侵入。

我們注意全局異常統(tǒng)一返回和切面使用統(tǒng)一返回結(jié)果都使用了一個注解@RestControllerAdvice。

以上就是SpringBoot返回結(jié)果統(tǒng)一處理實例詳解的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot返回結(jié)果統(tǒng)一處理的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • sun?unsafe類功能及使用注意事項詳解

    sun?unsafe類功能及使用注意事項詳解

    這篇文章主要為大家介紹了unsafe類的功能及在使用中需要注意的事項詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-01-01
  • java  ThreadPoolExecutor使用方法簡單介紹

    java ThreadPoolExecutor使用方法簡單介紹

    這篇文章主要介紹了java ThreadPoolExecutor使用方法簡單介紹的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Java基于IO流實現(xiàn)登錄和注冊功能

    Java基于IO流實現(xiàn)登錄和注冊功能

    這篇文章主要為大家詳細(xì)介紹了Java基于IO流實現(xiàn)登錄和注冊功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 基于swing實現(xiàn)窗體拖拽和拉伸

    基于swing實現(xiàn)窗體拖拽和拉伸

    這篇文章主要為大家詳細(xì)介紹了基于swing實現(xiàn)窗體拖拽和拉伸,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • jmeter正則表達(dá)式的使用

    jmeter正則表達(dá)式的使用

    在jmeter中,可以利用正則表達(dá)式提取器來幫助我們完成這一動作,本文就詳細(xì)的介紹一下應(yīng)該如何使用,感興趣的可以了解一下
    2021-11-11
  • SpringCloud Feign客戶端使用流程

    SpringCloud Feign客戶端使用流程

    在springcloud中,openfeign是取代了feign作為負(fù)載均衡組件的,feign最早是netflix提供的,他是一個輕量級的支持RESTful的http服務(wù)調(diào)用框架,內(nèi)置了ribbon,而ribbon可以提供負(fù)載均衡機(jī)制,因此feign可以作為一個負(fù)載均衡的遠(yuǎn)程服務(wù)調(diào)用框架使用
    2023-01-01
  • Java interrupt()方法使用注意_動力節(jié)點(diǎn)Java學(xué)院整理

    Java interrupt()方法使用注意_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Java interrupt()方法使用注意_動力節(jié)點(diǎn)Java學(xué)院整理,需要的朋友可以參考下
    2017-05-05
  • SpringBoot學(xué)習(xí)之基于注解的緩存

    SpringBoot學(xué)習(xí)之基于注解的緩存

    spring boot對緩存支持非常靈活,我們可以使用默認(rèn)的EhCache,也可以整合第三方的框架,只需配置即可,下面這篇文章主要給大家介紹了關(guān)于SpringBoot學(xué)習(xí)之基于注解緩存的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • Java通過stmp協(xié)議發(fā)送郵件

    Java通過stmp協(xié)議發(fā)送郵件

    這篇文章主要為大家詳細(xì)介紹了Java通過stmp協(xié)議發(fā)送郵件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Java IO流之原理分類與節(jié)點(diǎn)流文件操作詳解

    Java IO流之原理分類與節(jié)點(diǎn)流文件操作詳解

    流(Stream)是指一連串的數(shù)據(jù)(字符或字節(jié)),是以先進(jìn)先出的方式發(fā)送信息的通道,數(shù)據(jù)源發(fā)送的數(shù)據(jù)經(jīng)過這個通道到達(dá)目的地,按流向區(qū)分為輸入流和輸出流
    2021-10-10

最新評論