当前位置:首页 > 系统运维

为你Springboot项目自定义一个通用的异常

前言

我们的目自项目通常来讲都是一个比较大的项目,包含了各种各样的定义服务。如果每个服务都以不同的个通方式返回异常信息,这样排查的用的异常时候就会比较凌乱。如果我们定义一个标准的目自异常处理体系。并在所有的定义服务中使用。那样开发起来就可以快速定位。个通页面也会更加的用的异常简单和直观。

本文开发环境基于springboot2.4,目自IDE环境是定义IDEA。这里从一个最简单的个通异常案例。逐步过渡到完全自定义自己的用的异常异常。

案例:Springboot查询数据库数据,目自发现返回的定义是null,就抛出异常。个通

OK,基于这个思想,高防服务器看一下实现的思路。

一、简单案例代码实现

1、新建一个Springboot应用

2、新建dao包,创建User类

这个比较简单,代码如下:

public class User {      private int id;     private String name;     public User() {      }     public User(int id, String name) {          this.id = id;         this.name = name;     }     //getter和setter方法     //toString方法 } 

3、新建service包,创建UserService

@Service public class UserService {      public User findOne(int id){          //本来应该向数据库查询User,但是数据库没有         return null;     } } 

由于演示的是异常的案例,因此这里没有真正实现数据库的增删改查操作。当调用findOne方法时,直接返回为null即可。

4、新建controller包,创建UserController类

@RestController public class UserController {      @Autowired     private UserService service;     @GetMapping("/users/{ id}")     public User retriveUser(@PathVariable int id)              throws UserNotFoundException {          User user= service.findOne(id);         if(user==null)             throw new UserNotFoundException("id: "+ id);         return user;     } } 

这里自定义了一个异常UserNotFoundException,当数据库查询的时候一旦发现返回值为null,就直接抛出这个异常。

5、在controller包下,创建UserNotFoundException类

public class UserNotFoundException extends RuntimeException {      public UserNotFoundException(String message){          super(message);         System.out.println("异常信息是:"+message);     } } 

6、postman测试

这时候进行测试会发现服务器代码会报错。我们的资源没有找到总不能提示服务器内部错误吧。现在对抛出的亿华云计算异常进行一个处理。

7、异常处理

@ResponseStatus(HttpStatus.NOT_FOUND) public class UserNotFoundException extends RuntimeException {      public UserNotFoundException(String message){          super(message);         System.out.println("异常信息是:"+message);     } } 

我们将添加一个注释@ResponseStatus来生成状态:404 Not Found。当然还有其他的状态。这个可以根据自己的需要去返回。我们使用了HttpStatus.NOT_FOUND用户访问的时候,一旦抛出了异常就会显示404错误。这个你换成其他的状态,还会显示其他的信息。

8、重新测试

Spring Boot和Spring MVC框架的结合提供了错误处理。其内部已经自动配置一些默认异常处理。所以在开发中为所有服务配置一致的异常消息是很重要的。

二、通用的异常处理

1、添加依赖

<dependency>       <groupId>org.springframework</groupId>       <artifactId>spring-webmvc</artifactId>       <version>5.3.2</version> </dependency> 

2、创建异常返回实体类ExceptionResponse

这个类的作用是,当有异常时,我们想要展示的信息。服务器托管

public class ExceptionResponse {      private Date timestamp;     private String message;     private String detail;     public ExceptionResponse() {  }     public ExceptionResponse(Date timestamp, String message, String detail) {          this.timestamp = timestamp;         this.message = message;         this.detail = detail;     }     public Date getTimestamp() {          return timestamp;     }     public String getMessage() {          return message;     }     public String getDetail() {          return detail;     } } 

这里只需要实现getter方法,setter方法就不需要。

3、创建通用异常处理类

@ControllerAdvice @RestController public class CustomizedResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {      //此方法主要处理所有的异常信息     @ExceptionHandler(Exception.class)     public final ResponseEntity<Object> handleAllExceptions(Exception ex, WebRequest request) {          //当出现异常时,我们输出的信息,这里被封装在了ExceptionResponse         ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), ex.getMessage(), request.getDescription(false));         return new ResponseEntity(exceptionResponse, HttpStatus.INTERNAL_SERVER_ERROR);     }     //当页面资源没有找到时,抛出的异常     @ExceptionHandler(UserNotFoundException.class)     public final ResponseEntity<Object> handleUserNotFoundExceptions(UserNotFoundException ex, WebRequest request) {          ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), ex.getMessage(), request.getDescription(false));         return new ResponseEntity(exceptionResponse, HttpStatus.NOT_FOUND);     } } 

很简单。里面有很多API,可以自己根据需要去查即可。

4、postman测试

万事大吉。赶快为你的程序自定义一个通用的异常处理程序吧。

本文转载自微信公众号「愚公要移山」,可以通过以下二维码关注。转载本文请联系愚公要移山公众号。

分享到:

滇ICP备2023006006号-16