下面我将从以下三个方面来详细讲解Spring Boot如何统一接口返回以及全局异常处理:
- 统一接口返回
- 全局异常处理
- 示例说明
1. 统一接口返回
在Spring Boot中,我们可以通过统一定义返回结果的数据类型,并在结果中包含状态码、消息提示和返回数据来实现统一接口返回。下面是一个示例实现:
@Data
public class Result<T> {
private Integer code;
private String message;
private T data;
public Result(Integer code, String message, T data) {
this.code = code;
this.message = message;
this.data = data;
}
}
@RestController
@RequestMapping("/api")
public class ExampleController {
@GetMapping("/example")
public Result<String> example() {
return new Result<>(200, "success", "Example");
}
}
在上面的代码中,我们定义了一个Result
类来表示返回结果,并在ExampleController
中返回了一个Result
实例。这样,我们就可以在所有接口中使用Result
来统一返回结果了。
2. 全局异常处理
在Spring Boot中,我们可以通过使用@ControllerAdvice
注解来定义全局异常处理类,从而实现统一的异常处理。下面是一个示例实现:
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public Result<String> handleException(Exception e) {
return new Result<>(500, e.getMessage(), null);
}
@ExceptionHandler(MyException.class)
public Result<String> handleMyException(MyException e) {
return new Result<>(e.getCode(), e.getMessage(), null);
}
}
在上面的代码中,我们定义了一个GlobalExceptionHandler
类,并在类中使用@ExceptionHandler
注解来捕获所有异常和自定义异常MyException
,然后返回相应的Result
实例,实现了全局异常处理。
3. 示例说明
下面是两个示例:
示例一:未处理异常
如果在没有全局异常处理的情况下,发生了异常,接口将返回500状态码:
{
"timestamp": "2021-09-06T03:03:35.447+00:00",
"status": 500,
"error": "Internal Server Error",
"path": "/api/example"
}
示例二:自定义异常处理
如果我们在业务中自定义了一个异常MyException
,并在处理该异常时抛出了自定义的状态码和消息提示,接口将返回自定义的状态码和消息提示:
@Data
@AllArgsConstructor
public class MyException extends RuntimeException {
private Integer code;
private String message;
}
@RestController
@RequestMapping("/api")
public class ExampleController {
@GetMapping("/example")
public Result<String> example() {
throw new MyException(400, "Bad Request");
}
}
{
"code": 400,
"message": "Bad Request",
"data": null
}
这就是一个完整的Spring Boot如何统一接口返回与全局异常处理的攻略。通过统一接口返回和全局异常处理,能够让接口返回数据更加规范化、易于维护和调试。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot中如何统一接口返回与全局异常处理详解 - Python技术站