日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

如何优雅的处理异常?SpringBoot全局异常与数据校验

發布時間:2023/12/15 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何优雅的处理异常?SpringBoot全局异常与数据校验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

要思考的問題

在現在的前后端交互中,通常都規范了接口返回方式,如返回的接口狀態(成功|失敗)以及要返回的數據在那個字段取,或者說失敗了以后提示信息從接口哪里返回,因此,如果想做全局異常,并且異常發生后能準確的返回給前端解析,那么需要異常發生時返回給前端的格式與正常失敗場景的格式一致。

項目建立

利用idea 工具,很容易的搭建一個SpringBoot項目,要引入的maven依賴如下:

<groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> 復制代碼 <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> 復制代碼 <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope> 復制代碼

很簡單,除了加入web功能還加入了我們需要用到的JSR-303校驗框架。

定義成功失敗 返回碼

public class Code {

/*** 成功*/public static int SUCCESSED = 1;/*** 失敗*/public static int FAILED = -1; 復制代碼

}

定義接口返回響應實體

public class Response implements Serializable{

/**

* */ 復制代碼

private static final long serialVersionUID = 4250719891313555820L;

/**

* 返回結果集*/ 復制代碼

private T result;

/**

* 返回消息*/ 復制代碼

private String msg;

/**

* 響應碼*/ 復制代碼

private Integer code;

//set get 略

}

全局異常攔截和驗證

定義自定義業務異常

public class MyException extends RuntimeException {

private static final long serialVersionUID = -5875371379845226068L;public MyException(){}public MyException(String msg){this.msg = msg ;}/*** 異常信息*/private String msg ;/*** 具體異常碼*/private int code = Code.FAILED; 復制代碼

get set 略

編寫全局異常控制器并對自定義異常做處理

@ControllerAdvice

public class GlobalExceptionHandler {

private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); 復制代碼

@ExceptionHandler(value = MyException.class)

@ResponseBody

public Response myExceptionErrorHandler(MyException ex) throws Exception {

logger.error("myExceptionErrorHandler info:{}",ex.getMessage());Response<String> r = new Response<>();r.setMsg(ex.getMsg());r.setCode(ex.getCode());return r; 復制代碼

}

編寫controller模擬拋出業務異常

@RestController

@RequestMapping("/user")

public class UserController {

@PostMapping(value = "/update")

Response update(User user){

//todo 此處為模擬異常拋出if(true){throw new MyException("更新失敗");}//todo 此處為模擬返回Response<Boolean> response = new Response<>();response.setCode(Code.SUCCESSED);response.setResult(true);return response; 復制代碼

}

}

postMan模擬請求接口,進行驗證

數據綁定異常處理

通常我們操作數據的時候,不僅前端需要進行數據校驗,后端也應當進行攔截和進行相應的錯誤提示,JSR-303校驗框架也是我們的一種選擇。

編寫實體User,并對屬性進行注解控制

public class User {

@NotNull(message = "用戶名不能為空")private String userName;private int age; 復制代碼

//...

全局異常控制類加入攔截

@ControllerAdvice

public class GlobalExceptionHandler {

private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);@ExceptionHandler(value = BindException.class)@ResponseBodypublic Response<String> bindExceptionErrorHandler(BindException ex) throws Exception {logger.error("bindExceptionErrorHandler info:{}",ex.getMessage());Response<String> r = new Response<>();StringBuilder sb = new StringBuilder();FieldError fieldError = ex.getFieldError();sb.append(fieldError.getDefaultMessage());r.setMsg(sb.toString());r.setCode(Code.FAILED);return r;} 復制代碼

//...

編寫控制器

@RestController

@RequestMapping("/user")

public class UserController {

@PostMapping(value = "/add")Response<User> add(@Validated User user){//todo 此處為模擬返回Response<User> response = new Response<>();response.setCode(Code.SUCCESSED);response.setResult(new User());return response;} 復制代碼

//...

postMan模擬請求

不填寫任何屬性,模擬添加操作,準確進行攔截和報錯

項目結構預覽:

結尾

適合的才是最好的,每個團隊都應摸索出自己的一套異常解決方案,本文所提僅針對業務異常,希望大家也能有所收獲

歡迎工作一到五年的Java工程師朋友們加入Java程序員開發: 854393687

群內提供免費的Java架構學習資料(里面有高可用、高并發、高性能及分布式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!

轉載于:https://juejin.im/post/5c11cfaa6fb9a04a0604bc09

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的如何优雅的处理异常?SpringBoot全局异常与数据校验的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。