亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Graceful Response 構建 Spring Boot 響應處理的方法

 更新時間:2024年01月25日 11:11:13   作者:小畢超  
Graceful Response是一個Spring Boot技術棧下的優(yōu)雅響應處理器,提供一站式統(tǒng)一返回值封裝、全局異常處理、自定義異常錯誤碼等功能,本文介紹Graceful Response 構建 Spring Boot 下優(yōu)雅的響應處理,感興趣的朋友一起看看吧

一、Graceful Response

Graceful Response 是一個 Spring Boot 技術棧下的優(yōu)雅響應處理器,提供一站式統(tǒng)一返回值封裝、全局異常處理、自定義異常錯誤碼等功能,使用Graceful Response進行web接口開發(fā)不僅可以節(jié)省大量的時間,還可以提高代碼質量,使代碼邏輯更清晰。

github地址:https://github.com/feiniaojin/graceful-response

對應 SpringBoot 版本

Spring Boot版本Graceful Response版本graceful-response-example分支
2.x3.4.0-boot23.4.0-boot2
3.x3.4.0-boot33.4.0-boot3

二、快速使用

引入依賴:

<dependency>
    <groupId>com.feiniaojin</groupId>
    <artifactId>graceful-response</artifactId>
    <version>3.4.0-boot2</version>
</dependency>

啟動類增加注解:

@EnableGracefulResponse

聲明測試接口:

@Slf4j
@RestController
@RequestMapping("/test")
public class TestController {
    /**
     * 返回對象形式
     */
    @GetMapping("/t1")
    public Map<String, String> t1() {
        //具體邏輯
        return Collections.singletonMap("status","abc");
    }
    /**
     * Command 形式
     */
    @GetMapping("/t2")
    public void t2() {
        // 具體邏輯
    }
}

測試 /test/t1 接口:

測試 /test/t2 接口:

三、返回格式調整

Graceful Response 內置了兩種風格的返回,可以通過修改 graceful-response.response-style 進行切換,分別是:

默認格式:

graceful-response:
  response-style: 0

第二種模式:

{
  "status": {
    "code": 200,
    "msg": "success"
  },
  "payload": {
  }
}

格式如下:

{
  "code": "200",
  "msg": "success",
  "data": {
  }
}

如果需要自定義返回格式則需要實現(xiàn) Response 接口,并在配置中通過graceful-response.response-class-full-name 進行指定,例如:

@Data
public class CustomResponse implements Response {

    private String code;

    private Long timestamp = System.currentTimeMillis();

    private String message;

    private Object data = Collections.EMPTY_MAP;

    @Override
    public void setStatus(ResponseStatus statusLine) {
        this.code = statusLine.getCode();
        this.message = statusLine.getMsg();
    }

    @Override
    @JsonIgnore
    public ResponseStatus getStatus() {
        return null;
    }

    @Override
    public void setPayload(Object payload) {
        this.data = payload;
    }

    @Override
    @JsonIgnore
    public Object getPayload() {
        return null;
    }
}

然后在配置文件中聲明:

graceful-response:
  response-class-full-name: com.bxc.retrydemo.handler.CustomResponse

再次訪問上面的測試接口:

四、自定義異常和錯誤碼

當拋出異常時我們希望根據(jù)不同的異常返回不同的錯誤碼,在 Graceful Response 中為我們提供了 @ExceptionMapper 注解,可以快速的指定返回的錯誤碼和提示。

例如:

@ExceptionMapper(code = "1003", msg = "自定義異常", msgReplaceable = true)
public class MyException extends RuntimeException {
    public MyException() {
        super();
    }
    public MyException(String message) {
        super(message);
    }
    public MyException(String message, Throwable cause) {
        super(message, cause);
    }
    public MyException(Throwable cause) {
        super(cause);
    }
    public MyException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}

測試接口修改:

@Slf4j
@RestController
@RequestMapping("/test")
public class TestController {
    /**
     * 返回對象形式
     */
    @GetMapping("/t1")
    public Map<String, String> t1(Integer a) {
        //具體邏輯
        // ....
        // 拋出異常
        if (a == 0){
            throw new MyException();
        }
        return Collections.singletonMap("status","abc");
    }
    /**
     * Command 形式
     */
    @GetMapping("/t2")
    public void t2(Integer a) {
        //具體邏輯
        // ....
        // 拋出異常
        if (a == 0){
            throw new MyException("t2 接口執(zhí)行異常");
        }
    }
}

測試 /test/t1 接口:

測試 /test/t2 接口:

五、參數(shù)校驗異常錯誤碼

有的時候我們需要校驗某個參數(shù)是否合法,當在不同情況下需要返回不同的錯誤碼,在 Graceful Response 中對JSR-303數(shù)據(jù)校驗規(guī)范和Hibernate Validator進行了增強,Graceful Response自身不提供參數(shù)校驗的功能,但是用戶使用了Hibernate Validator后,Graceful Response可以通過@ValidationStatusCode注解為參數(shù)校驗結果提供響應碼,并將其統(tǒng)一封裝返回。

例如:

@Data
public class TestDTO {
    @NotNull(message = "name 不可為空")
    @Length(min = 1, max = 5, message = "name 的長度在 1-5 之間")
    @ValidationStatusCode(code = "1003")
    private String name;
    @NotNull(message = "age 不可為空")
    @Min(value = 0,message = "age 不可小于 0 ")
    @ValidationStatusCode(code = "1004")
    private Integer age;
}

聲明測試接口:

@Slf4j
@RestController
@RequestMapping("/test")
public class TestController {
    @PostMapping("/t3")
    public void t3(@Validated TestDTO dto) {
        //具體邏輯
        // ....
    }
}

測試 /test/t3 接口:

六、手動拋出指定狀態(tài)碼和信息

Graceful Response 提供了 GracefulResponse 通用工具類,在需要拋出GracefulResponseException時,只需要調用raiseException方法即可。

例如:

@Slf4j
@RestController
@RequestMapping("/test")
public class TestController {
    /**
     * 返回對象形式
     */
    @GetMapping("/t1")
    public Map<String, String> t1(Integer a) {
        //具體邏輯
        // ....
        // 拋出異常
        if (a == 0) {
            GracefulResponse.raiseException("1065", "自定義拋出異常");
        }
        return Collections.singletonMap("status", "abc");
    }
}

測試 /test/t1 接口:

七、例外請求放行

Graceful Response 會對所有的 controller 方法處理,如果希望跳過自定處理返回可以可以添加 @ExcludeFromGracefulResponse注解:

例如:

@Slf4j
@RestController
@RequestMapping("/test")
public class TestController {
    /**
     * 返回對象形式
     */
    @GetMapping("/t1")
    @ExcludeFromGracefulResponse
    public Map<String, String> t1(Integer a) {
        //具體邏輯
        // ....
        return Collections.singletonMap("status", "abc");
    }
}

也可以根據(jù)包名進行排除,例如:

graceful-response:
  exclude-packages:
    - springfox.**
graceful-response:
  exclude-packages:
    - org.springframework.boot.actuate.*

八、常用配置

graceful-response:
  # 自定義Response類的全限定名,默認為空。 
  # 配置response-class-full-name后,response-style將不再生效
  response-class-full-name:
  # 是否打印異常日志,默認為false
  print-exception-in-global-advice: false
  # Response風格,不配置默認為0
  response-style: 0
  # 自定義的成功響應碼,不配置則為0
  default-success-code: 0
  # 自定義的成功提示,默認為ok
  default-success-msg: ok
  # 自定義的失敗響應碼,默認為1
  default-error-code: 1
  # 自定義的失敗提示,默認為error
  default-error-msg: error
  # 全局的參數(shù)校驗錯誤碼,默認等于default-error-code
  default-validate-error-code:
  # 例外包路徑(支持數(shù)字, *和**通配符匹配),該包路徑下的controller將被忽略處理
  exclude-packages:
    - com.lizhiadmin.pro.module.*.controller
  # 設置是否將原生異常錯誤信息detailMessage字段填充到Response的msg中
  # 默認為false,即不打開
  origin-exception-using-detail-message: false

到此這篇關于Graceful Response 構建 Spring Boot 下優(yōu)雅的響應處理的文章就介紹到這了,更多相關Spring Boot 響應處理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Spring?cloud?Hystrix注解初始化源碼過程解讀

    Spring?cloud?Hystrix注解初始化源碼過程解讀

    這篇文章主要為大家介紹了Hystrix初始化部分,我們從源碼的角度分析一下@EnableCircuitBreaker以及@HystrixCommand注解的初始化過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2023-12-12
  • Spring Data + Thymeleaf 3 + Bootstrap 4 實現(xiàn)分頁器實例代碼

    Spring Data + Thymeleaf 3 + Bo

    本篇文章主要介紹了Spring Data + Thymeleaf 3 + Bootstrap 4 實現(xiàn)分頁器實例代碼,非常具有實用價值,需要的朋友可以參考下
    2017-05-05
  • Java實現(xiàn)無損Word轉PDF的示例代碼

    Java實現(xiàn)無損Word轉PDF的示例代碼

    本文將利用Java中的兩個jar包:pdfbox和aspose-words實現(xiàn)無損Word轉PDF功能,文中的示例代碼講解詳細,感興趣的小伙伴可以動手嘗試一下
    2022-06-06
  • Mybatis批量插入的三種實現(xiàn)方法

    Mybatis批量插入的三種實現(xiàn)方法

    在日常開發(fā)中,如果要操作數(shù)據(jù)庫的話,或多或少都會遇到批量數(shù)據(jù)的處理,本文主要介紹了Mybatis批量插入的三種實現(xiàn)方法,感興趣的可以了解一下
    2023-10-10
  • 關于通過java調用datax,返回任務執(zhí)行的方法

    關于通過java調用datax,返回任務執(zhí)行的方法

    今天小編就為大家分享一篇關于通過java調用datax,返回任務執(zhí)行的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Spring AI 入門學習指南

    Spring AI 入門學習指南

    本文介紹了如何使用SpringAI和Ollama進行AI開發(fā),包括如何配置和使用聊天、圖像、語音轉文字和文字轉語音模型,以及如何在Java項目中集成Ollama模型,感興趣的朋友一起看看吧
    2024-11-11
  • Spring Boot 添加MySQL數(shù)據(jù)庫及JPA實例

    Spring Boot 添加MySQL數(shù)據(jù)庫及JPA實例

    本篇文章主要介紹了Spring Boot 添加MySQL數(shù)據(jù)庫及JPA,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Java反射機制在Spring IOC中的應用詳解

    Java反射機制在Spring IOC中的應用詳解

    這篇文章主要介紹了Java反射機制在Spring IOC中的應用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • centos7如何通過systemctl啟動springboot服務代替java -jar方式啟動

    centos7如何通過systemctl啟動springboot服務代替java -jar方式啟動

    這篇文章主要介紹了centos7如何通過systemctl啟動springboot服務代替java -jar方式啟動,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01
  • SpringCloud-Hystrix實現(xiàn)原理總結

    SpringCloud-Hystrix實現(xiàn)原理總結

    通過hystrix可以解決雪崩效應問題,它提供了資源隔離、降級機制、融斷、緩存等功能。接下來通過本文給大家分享SpringCloud-Hystrix實現(xiàn)原理,感興趣的朋友一起看看吧
    2021-05-05

最新評論