成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為你Springboot項目自定義一個通用的異常

開發 項目管理
我們的項目通常來講都是一個比較大的項目,包含了各種各樣的服務。如果每個服務都以不同的方式返回異常信息,這樣排查的時候就會比較凌亂。

[[373931]]

前言

我們的項目通常來講都是一個比較大的項目,包含了各種各樣的服務。如果每個服務都以不同的方式返回異常信息,這樣排查的時候就會比較凌亂。如果我們定義一個標準的異常處理體系。并在所有的服務中使用。那樣開發起來就可以快速定位。頁面也會更加的簡單和直觀。

本文開發環境基于springboot2.4,IDE環境是IDEA。這里從一個最簡單的異常案例。逐步過渡到完全自定義自己的異常。

案例:Springboot查詢數據庫數據,發現返回的是null,就拋出異常。

OK,基于這個思想,看一下實現的思路。

一、簡單案例代碼實現

1、新建一個Springboot應用

2、新建dao包,創建User類

這個比較簡單,代碼如下:

  1. public class User { 
  2.     private int id; 
  3.     private String name
  4.     public User() { 
  5.     } 
  6.     public User(int id, String name) { 
  7.         this.id = id; 
  8.         this.name = name
  9.     } 
  10.     //getter和setter方法 
  11.     //toString方法 

3、新建service包,創建UserService

  1. @Service 
  2. public class UserService { 
  3.     public User findOne(int id){ 
  4.         //本來應該向數據庫查詢User,但是數據庫沒有 
  5.         return null
  6.     } 

由于演示的是異常的案例,因此這里沒有真正實現數據庫的增刪改查操作。當調用findOne方法時,直接返回為null即可。

4、新建controller包,創建UserController類

  1. @RestController 
  2. public class UserController { 
  3.     @Autowired 
  4.     private UserService service; 
  5.     @GetMapping("/users/{id}"
  6.     public User retriveUser(@PathVariable int id)  
  7.             throws UserNotFoundException { 
  8.         User user= service.findOne(id); 
  9.         if(user==null
  10.             throw new UserNotFoundException("id: "+ id); 
  11.         return user
  12.     } 

這里自定義了一個異常UserNotFoundException,當數據庫查詢的時候一旦發現返回值為null,就直接拋出這個異常。

5、在controller包下,創建UserNotFoundException類

  1. public class UserNotFoundException extends RuntimeException { 
  2.     public UserNotFoundException(String message){ 
  3.         super(message); 
  4.         System.out.println("異常信息是:"+message); 
  5.     } 

6、postman測試

這時候進行測試會發現服務器代碼會報錯。我們的資源沒有找到總不能提示服務器內部錯誤吧。現在對拋出的異常進行一個處理。

7、異常處理

  1. @ResponseStatus(HttpStatus.NOT_FOUND) 
  2. public class UserNotFoundException extends RuntimeException { 
  3.     public UserNotFoundException(String message){ 
  4.         super(message); 
  5.         System.out.println("異常信息是:"+message); 
  6.     } 

我們將添加一個注釋@ResponseStatus來生成狀態:404 Not Found。當然還有其他的狀態。這個可以根據自己的需要去返回。我們使用了HttpStatus.NOT_FOUND用戶訪問的時候,一旦拋出了異常就會顯示404錯誤。這個你換成其他的狀態,還會顯示其他的信息。

8、重新測試

Spring Boot和Spring MVC框架的結合提供了錯誤處理。其內部已經自動配置一些默認異常處理。所以在開發中為所有服務配置一致的異常消息是很重要的。

二、通用的異常處理

1、添加依賴

  1. <dependency> 
  2.       <groupId>org.springframework</groupId> 
  3.       <artifactId>spring-webmvc</artifactId> 
  4.       <version>5.3.2</version> 
  5. </dependency> 

2、創建異常返回實體類ExceptionResponse

這個類的作用是,當有異常時,我們想要展示的信息。

  1. public class ExceptionResponse { 
  2.     private Date timestamp
  3.     private String message; 
  4.     private String detail; 
  5.     public ExceptionResponse() { } 
  6.     public ExceptionResponse(Date timestamp, String message, String detail) { 
  7.         this.timestamp = timestamp
  8.         this.message = message; 
  9.         this.detail = detail; 
  10.     } 
  11.     public Date getTimestamp() { 
  12.         return timestamp
  13.     } 
  14.     public String getMessage() { 
  15.         return message; 
  16.     } 
  17.     public String getDetail() { 
  18.         return detail; 
  19.     } 

這里只需要實現getter方法,setter方法就不需要。

3、創建通用異常處理類

  1. @ControllerAdvice 
  2. @RestController 
  3. public class CustomizedResponseEntityExceptionHandler extends ResponseEntityExceptionHandler { 
  4.  
  5.     //此方法主要處理所有的異常信息 
  6.     @ExceptionHandler(Exception.class) 
  7.     public final ResponseEntity<Object> handleAllExceptions(Exception ex, WebRequest request) { 
  8.         //當出現異常時,我們輸出的信息,這里被封裝在了ExceptionResponse 
  9.         ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), ex.getMessage(), request.getDescription(false)); 
  10.         return new ResponseEntity(exceptionResponse, HttpStatus.INTERNAL_SERVER_ERROR); 
  11.     } 
  12.     //當頁面資源沒有找到時,拋出的異常 
  13.     @ExceptionHandler(UserNotFoundException.class) 
  14.     public final ResponseEntity<Object> handleUserNotFoundExceptions(UserNotFoundException ex, WebRequest request) { 
  15.         ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), ex.getMessage(), request.getDescription(false)); 
  16.         return new ResponseEntity(exceptionResponse, HttpStatus.NOT_FOUND); 
  17.     } 

很簡單。里面有很多API,可以自己根據需要去查即可。

4、postman測試

萬事大吉。趕快為你的程序自定義一個通用的異常處理程序吧。

本文轉載自微信公眾號「愚公要移山」,可以通過以下二維碼關注。轉載本文請聯系愚公要移山公眾號。

 

 

責任編輯:武曉燕 來源: 愚公要移山
相關推薦

2021-01-07 05:24:38

SpringbootSpringBanner

2009-04-28 13:25:36

Ajax函數Java

2012-11-19 11:07:42

IBMdw

2011-12-16 14:23:51

Java

2019-07-07 10:00:00

Linux系統托盤指示器

2019-07-05 14:20:10

Linux系統托盤

2022-06-06 09:28:36

ReactHook

2023-07-03 08:29:11

BannerSpringBoot

2023-11-22 09:45:44

2020-09-18 10:12:24

KotlinTCP網絡協議

2021-03-09 15:23:45

鴻蒙HarmonyOS應用開發

2014-11-12 10:26:25

Bootstrap

2021-02-23 08:01:01

HooksReact架構

2017-06-20 12:48:55

React Nativ自定義模塊Note.js

2021-06-17 06:52:37

C#自定義異常

2020-09-07 09:54:01

GNOME桌面主題桌面應用

2024-11-27 16:38:07

2023-10-11 07:57:23

springboot微服務

2009-08-03 16:37:49

C#異常類

2021-06-21 06:32:04

Python異常傳遞s自定義異常
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区在线观看免费视频 | 色一级| 国产精品欧美一区二区三区不卡 | 一区二区三区欧美 | 99re在线 | 福利视频网址 | 日韩欧美国产精品一区 | 81精品国产乱码久久久久久 | 国产精品亚洲精品日韩已方 | 蜜桃视频一区二区三区 | 久久不射电影网 | 欧洲成人| 精产国产伦理一二三区 | 国产精品久久久久久久久久妞妞 | 国产区在线观看 | 精品美女 | 欧洲免费毛片 | 亚洲成人精品国产 | 中文字幕亚洲在线 | 久久精品综合 | 国产毛片视频 | 91久久精品一区 | 91成人精品视频 | 久久久久国产精品免费免费搜索 | 日本精品视频 | 日韩一区二区三区精品 | 黄色大片网站 | 欧美一区二区三区的 | 国产精品一区一区 | 国产精品视屏 | 亚洲男人天堂2024 | 欧美一区二区三区在线播放 | 鸡毛片 | 国产色在线 | 欧美精品一区二区三区四区五区 | 欧美美女二区 | 亚洲精品久久久久久久久久久久久 | 国产乱码精品1区2区3区 | 欧美1页 | 91精品国产综合久久久久久丝袜 | 性做久久久久久免费观看欧美 |