返回

在@RestControllerAdvice中封装返回结果

后端

以下是根据您的输入和参考所生成的文本:

在 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 createUser(@RequestBody User user) {
return ResponseEntity.status(HttpStatus.CREATED).body(userService.createUser(user));
}


在上面的代码中,我们使用 `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` 注解,我们可以轻松实现返回结果的统一封装和异常的统一接收。这可以帮助我们提高代码的质量和可维护性。