返回
在@RestControllerAdvice中封装返回结果
后端
2023-12-06 08:32:23
以下是根据您的输入和参考所生成的文本:
在 Spring Boot 中,返回结果的统一封装和异常的统一接收是很常见的需求。通过使用 `@RestControllerAdvice` 注解,我们可以轻松实现这些需求。
### 1. 使用 `@RestControllerAdvice` 注解
首先,我们需要创建一个 `@RestControllerAdvice` 注解的类。例如:
@RestControllerAdvice
public class GlobalControllerAdvice {
@ExceptionHandler(Exception.class)
public ResponseEntity<Object> handleException(Exception ex, WebRequest request) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(ex.getMessage());
}
}
在上面的代码中,我们创建了一个名为 `GlobalControllerAdvice` 的类,并使用 `@RestControllerAdvice` 注解标记它。这个类可以处理所有的异常,并返回一个统一的响应。
### 2. 封装返回结果
为了封装返回结果,我们可以使用 `ResponseEntity` 类。例如:
@PostMapping("/api/users")
public ResponseEntity
在上面的代码中,我们使用 `ResponseEntity` 类来封装返回结果。我们首先设置了响应的状态码为 `201 Created`,然后将创建的用户作为响应体返回。
### 3. 异常统一接收
使用 `@RestControllerAdvice` 注解,我们可以统一处理所有的异常。例如:
@RestControllerAdvice
public class GlobalControllerAdvice {
@ExceptionHandler(Exception.class)
public ResponseEntity<Object> handleException(Exception ex, WebRequest request) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(ex.getMessage());
}
}
在上面的代码中,我们使用 `@ExceptionHandler` 注解来处理所有的异常。当发生异常时,该方法会被调用,并返回一个统一的响应。
### 4. 使用示例
以下是一个使用 `@RestControllerAdvice` 注解的例子:
@RestController
@RequestMapping("/api/users")
public class UserController {
@PostMapping
public ResponseEntity<Object> createUser(@RequestBody User user) {
return ResponseEntity.status(HttpStatus.CREATED).body(userService.createUser(user));
}
}
@RestControllerAdvice
public class GlobalControllerAdvice {
@ExceptionHandler(Exception.class)
public ResponseEntity<Object> handleException(Exception ex, WebRequest request) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(ex.getMessage());
}
}
在上面的代码中,我们使用 `@RestController` 注解标记 `UserController` 类,并使用 `@RequestMapping` 注解指定该类的请求路径。然后,我们在 `UserController` 类中定义了一个创建用户的 API。当调用这个 API 时,如果发生异常,那么 `GlobalControllerAdvice` 类中的 `handleException` 方法会被调用,并返回一个统一的响应。
### 5. 结论
通过使用 `@RestControllerAdvice` 注解,我们可以轻松实现返回结果的统一封装和异常的统一接收。这可以帮助我们提高代码的质量和可维护性。