ApiResult.kt
package io.github.lishangbu.avalon.web.result
import java.io.Serializable
/**
* 统一的 API 响应模型
*
* 封装接口响应的状态码、业务数据和错误信息
*
* @author lishangbu
* @since 2025/4/16
*/
data class ApiResult<T>(
/** 状态码 */
val code: Int,
/** 数据 */
val data: T?,
/** 错误信息 */
val errorMessage: String?,
) : Serializable {
/** 获取状态码 */
fun code(): Int = code
/** 获取数据 */
fun data(): T? = data
/** 获取错误信息 */
fun errorMessage(): String? = errorMessage
companion object {
/** 成功状态码 */
const val SUCCESS_CODE: Int = 200
/** 序列化版本号 */
private const val serialVersionUID: Long = 1L
/** 构建成功响应 */
@JvmStatic
fun <T> ok(data: T?): ApiResult<T> = ApiResult(SUCCESS_CODE, data, null)
/** 按状态码与消息构建失败响应 */
@JvmStatic
fun failed(
code: Int,
errorMessage: String,
): ApiResult<Void> = ApiResult(code, null, errorMessage)
/** 按错误码枚举构建失败响应 */
@JvmStatic
fun failed(
errorResultCode: ErrorResultCode,
vararg errorMessages: String,
): ApiResult<Void> =
if (errorMessages.isEmpty()) {
failed(errorResultCode.code(), errorResultCode.errorMessage())
} else {
failed(errorResultCode.code(), errorMessages.joinToString(","))
}
}
}