2023年11月29日发(作者:)

springboot】异常处理

Spring Boot是一个非常流行的开发框架,它可以快速简单地

构建基于Spring的应用程序。

在开发过程中,异常处理是一项重要的工作。当出现异常时,

正确的处理方式可以增强程序的稳定性和可靠性。本文将介绍

如何在Spring Boot应用程序中进行异常处理。

Spring Boot中,异常处理通常是通过@ControllerAdvice

解来实现的。该注解可以将异常处理类与所有的Controller

联起来。

例如:

```

@ControllerAdvice

public class GlobalExceptionHandler {

@ExceptionHandler()

public ResponseEntity

在上述代码中,我们定义了一个名为GlobalExceptionHandler

的异常处理类。该类用于处理所有的异常,并返回一个

ErrorResponse对象。

ErrorResponse是一个自定义的类,用于包含错误代码和错误

消息。在Spring Boot中,可以使用ResponseEntity对象将该

对象与HTTP状态码一起返回给客户端。

在上述代码中,我们使用

AL_SERVER_ERROR状态码来表示服务器

内部错误。这是一个标准的HTTP状态码,表示服务器在执行

请求时发生了错误。

可以使用不同的状态码来表示不同类型的错误。例如,

_FOUND状态码表示找不到请求的资源,

_REQUEST状态码表示无效的请求参数等等。

GlobalExceptionHandler类中,我们定义了一个名为

handleException的方法,该方法用于处理方法中抛出的所有异

常。我们使用@ExceptionHandler注解来告诉Spring Boot,哪

些异常需要被该方法处理。

在方法中,我们首先创建了一个名为errorErrorResponse

象。该对象包含了一个错误代码和错误消息。对于所有异常,

我们将错误代码设置为“500”,这是一个通用的服务器内部错

误代码。

接下来,我们使用ResponseEntity对象将该对象与

AL_SERVER_ERROR状态码一起返回给客

户端。

Spring Boot中,使用@ControllerAdvice注解可以将异常处

理类与所有的Controller关联起来。这意味着,当Controller

中出现异常时,Spring Boot会自动调用

GlobalExceptionHandler类中定义的异常处理方法。

总结:

Spring Boot开发中,异常处理是一个非常重要的工作。正

确的异常处理方式可以增强程序的稳定性和可靠性。在本文中,

我们介绍了如何在Spring Boot应用程序中进行异常处理,并

使用@ControllerAdvice注解将异常处理类与所有的Controller

关联起来。在现实的开发中,我们经常会遇到各种各样的异常

情况,如出现空指针异常、数据库访问异常等等。而这些异常

会导致程序的不稳定,甚至崩溃。因此,在Spring Boot应用

程序中进行异常处理是一项非常重要的工作。

下面我们通过一个具体的案例来介绍如何在Spring Boot中进

行异常处理。假设我们正在开发一个简单的RESTful API,用

户可以通过该API查询某个城市的天气情况。如果查询的城

市不存在,则应该返回一个错误提示。

首先,我们需要定义一个自定义异常类来处理不存在的城市异

常。如下所示:

```

public class CityNotFoundException extends RuntimeException {

public CityNotFoundException(String message) {

super(message);

}

}

```

在上述代码中,我们使用@RestControllerAdvice注解来标注异

常处理类,并使用@ExceptionHandler注解来标注处理

CityNotFoundException异常的方法

handleCityNotFoundException

在方法中,我们首先使用@ResponseStatus注解来指定HTTP

状态码为404NOT_FOUND)。然后,我们创建了一个名为

ErrorResponse的对象,该对象包含了一个错误代码和错误消

息。

Spring Boot中,我们可以使用ResponseEntity类来返回响

应实体。在该例中,我们在异常处理方法中直接返回了一个

ErrorResponse对象。由于使用了@RestControllerAdvice注解,

因此Spring Boot将自动将该对象转换为JSON格式并返回给

客户端。

最后,我们还需要在Controller中添加查询城市天气的逻辑,

并处理CityNotFoundException异常。如下所示:

```

@RestController

public class WeatherController {

@Autowired

private WeatherService weatherService;

@GetMapping("/weather/{city}")

public WeatherInfo getWeatherInfo(@PathVariable("city")

String city) {

WeatherInfo weatherInfo =

therInfo(city);

if (weatherInfo == null) {

throw new CityNotFoundException("City not found: " +

city);

}

return weatherInfo;

}

}

```

在上述代码中,我们定义了一个名为WeatherController

Controller类,并添加了一个名为getWeatherInfo的方法。该

方法用于查询指定城市的天气情况。

在方法中,我们调用WeatherService类的getWeatherInfo方法

来查询天气情况。如果查询结果为空,则抛出

CityNotFoundException异常。由于使用了@RestController

解,因此Spring Boot将自动将该异常转换为JSON格式并返

回给客户端。

提供的严谨的异常处理机制非常受欢迎,可以大大提高程序的

健壮性和可靠性。

举例来说,一些电商网站的购物车模块需要处理许多异常,例

如用户提交非法数据、库存不足、价格错误、订单已被取消等

等。通过Spring Boot的异常处理机制,开发人员可以方便地

捕获和处理异常,提供更好的用户体验和服务。此外,在企业