中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot中如何實現全局異常與數據校驗

發布時間:2021-08-10 16:24:45 來源:億速云 閱讀:190 作者:Leah 欄目:編程語言

SpringBoot中如何實現全局異常與數據校驗,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

項目建立

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

<dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-validation</artifactId>  </dependency>  <dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-web</artifactId>  </dependency>  <dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-test</artifactId>   <scope>test</scope>  </dependency>

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

定義成功失敗 返回碼

public class Code {   /**   * 成功   */   public static int SUCCESSED = 1;   /**   * 失敗   */   public static int FAILED = -1;  }

定義接口返回響應實體

public class Response<T> 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<String> 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<Boolean> 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模擬請求接口,進行驗證

SpringBoot中如何實現全局異常與數據校驗

數據綁定異常處理

通常我們操作數據的時候,不僅前端需要進行數據校驗,后端也應當進行攔截和進行相應的錯誤提示,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)   @ResponseBody   public 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模擬請求

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

SpringBoot中如何實現全局異常與數據校驗

項目結構預覽:

SpringBoot中如何實現全局異常與數據校驗

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邯郸县| 成都市| 宁远县| 太白县| 富顺县| 玉环县| 建平县| 乐业县| 门头沟区| 美姑县| 蒙自县| 获嘉县| 泊头市| 从化市| 万山特区| 阿拉善盟| 蒙城县| 儋州市| 晋宁县| 大新县| 增城市| 穆棱市| 大洼县| 巴楚县| 福海县| 天等县| 胶南市| 扎鲁特旗| 宽城| 广汉市| 通化市| 永善县| 镇赉县| 西城区| 开封市| 台北市| 宁远县| 大名县| 淄博市| 盐源县| 嘉峪关市|