问的最近很火的AI聊天,下面是AI生成的代码
data class ApiResponse<T>(
val success: Boolean,
val data: T? = null,
val error: ApiError? = null
)
data class ApiError(
val code: Int,
val message: String
)
@RestControllerAdvice
class ApiExceptionHandler {
@ExceptionHandler(Exception::class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
fun handleException(e: Exception): ApiResponse<Any> {
val error = ApiError(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.message ?: "Internal Server Error")
return ApiResponse(success = false, error = error)
}
@ExceptionHandler(MethodArgumentNotValidException::class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
fun handleValidationException(e: MethodArgumentNotValidException): ApiResponse<Any> {
val error = ApiError(HttpStatus.BAD_REQUEST.value(), "Validation Failed")
return ApiResponse(success = false, error = error)
}
}
@RestController
@RequestMapping("/api")
class ApiController(private val userService: UserService) {
@GetMapping("/users")
fun getUsers(): ApiResponse<List<User>> {
val users = userService.getUsers()
return ApiResponse(success = true, data = users)
}
@GetMapping("/users/{id}")
fun getUser(@PathVariable id: Long): ApiResponse<User> {
val user = userService.getUserById(id)
return ApiResponse(success = true, data = user)
}
@PostMapping("/users")
fun createUser(@RequestBody user: User): ApiResponse<User> {
val createdUser = userService.createUser(user)
return ApiResponse(success = true, data = createdUser)
}
@PutMapping("/users/{id}")
fun updateUser(@PathVariable id: Long, @RequestBody user: User): ApiResponse<User> {
val updatedUser = userService.updateUser(id, user)
return ApiResponse(success = true, data = updatedUser)
}
@DeleteMapping("/users/{id}")
fun deleteUser(@PathVariable id: Long): ApiResponse<Unit> {
userService.deleteUser(id)
return ApiResponse(success = true)
}
}
在这个示例代码中,我们定义了一个名为ApiResponse的数据类,它有三个属性:success、data和error,分别代表请求是否成功、请求成功时的数据和请求失败时的错误信息。
我们还定义了一个名为ApiError的数据类,它有两个属性:code和message,分别代表错误码和错误信息。
在ApiExceptionHandler类中,我们使用@RestControllerAdvice注解标记这个类是全局异常处理类,它会捕获所有Controller中抛出的异常并进行统一处理。我们为不同类型的异常分别定义了处理方法,当捕获到异常时,会根据异常类型返回相应的ApiResponse对象。
在ApiController类中,我们定义了一组用户相关的API接口,它们分别对应于查询用户列表、查询单个用户、创建用户、更新用户和删除用户等操作。这些接口的返回值都是ApiResponse对象,它们会根据操作结果返回相应的success、data和error属性。