自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

[[373931]]

前言

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

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

案例:Springboot查詢數(shù)據(jù)庫數(shù)據(jù),發(fā)現(xiàn)返回的是null,就拋出異常。

OK,基于這個思想,看一下實現(xiàn)的思路。

一、簡單案例代碼實現(xiàn)

1、新建一個Springboot應用

2、新建dao包,創(chuàng)建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包,創(chuàng)建UserService

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

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

4、新建controller包,創(chuàng)建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,當數(shù)據(jù)庫查詢的時候一旦發(fā)現(xiàn)返回值為null,就直接拋出這個異常。

5、在controller包下,創(chuàng)建UserNotFoundException類

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

6、postman測試

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

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來生成狀態(tài):404 Not Found。當然還有其他的狀態(tài)。這個可以根據(jù)自己的需要去返回。我們使用了HttpStatus.NOT_FOUND用戶訪問的時候,一旦拋出了異常就會顯示404錯誤。這個你換成其他的狀態(tài),還會顯示其他的信息。

8、重新測試

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

二、通用的異常處理

1、添加依賴

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

2、創(chuàng)建異常返回實體類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.     } 

這里只需要實現(xiàn)getter方法,setter方法就不需要。

3、創(chuàng)建通用異常處理類

  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.         //當出現(xiàn)異常時,我們輸出的信息,這里被封裝在了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,可以自己根據(jù)需要去查即可。

4、postman測試

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

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

 

 

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

2021-01-07 05:24:38

SpringbootSpringBanner

2009-04-28 13:25:36

Ajax函數(shù)Java

2012-11-19 11:07:42

IBMdw

2011-12-16 14:23:51

Java

2023-07-03 08:29:11

BannerSpringBoot

2019-07-07 10:00:00

Linux系統(tǒng)托盤指示器

2019-07-05 14:20:10

Linux系統(tǒng)托盤

2022-06-06 09:28:36

ReactHook

2021-03-09 15:23:45

鴻蒙HarmonyOS應用開發(fā)

2020-09-18 10:12:24

KotlinTCP網絡協(xié)議

2023-11-22 09:45:44

2021-02-23 08:01:01

HooksReact架構

2014-11-12 10:26:25

Bootstrap

2017-06-20 12:48:55

React Nativ自定義模塊Note.js

2021-06-17 06:52:37

C#自定義異常

2024-11-27 16:38:07

2023-10-11 07:57:23

springboot微服務

2009-08-03 16:37:49

C#異常類

2020-12-21 05:58:09

JavaScript視頻播放器開發(fā)

2024-08-01 17:20:55

點贊
收藏

51CTO技術棧公眾號