mirror of
https://github.moeyy.xyz/https://github.com/GeWuYou/forgeboot
synced 2025-10-27 19:12:10 +08:00
refactor(forgeboot-common):Refactoring the Unified Response Encapsulation Class R
- Removed unnecessary comments and redundant code - Optimized how success and failure response objects are created - added a new extension field extra to save extension information - Implemented the toMutableFlatMap and toFlatMap methods to convert the response object to Map - Refactored the way ResultExtender is used to improve scalability
This commit is contained in:
parent
20118cd51c
commit
9cdc962d9a
@ -10,18 +10,7 @@ import com.gewuyou.forgeboot.common.result.impl.DefaultRequestIdProvider
|
|||||||
/**
|
/**
|
||||||
* 统一响应封装类
|
* 统一响应封装类
|
||||||
*
|
*
|
||||||
* 该类用于统一系统中的响应格式,提供基本地响应信息如状态码、是否成功、消息内容、数据体等
|
|
||||||
* 并支持通过扩展器[ResultExtender]来扩展响应信息
|
|
||||||
*
|
|
||||||
* @param code 状态码
|
|
||||||
* @param success 是否成功
|
|
||||||
* @param message 响应消息
|
|
||||||
* @param data 响应数据体
|
|
||||||
* @param requestId 请求ID
|
|
||||||
* @param nameMap 响应字段名称映射表
|
|
||||||
*
|
|
||||||
* @since 2025-05-03 16:04:42
|
* @since 2025-05-03 16:04:42
|
||||||
* @author gewuyou
|
|
||||||
*/
|
*/
|
||||||
data class R<T>(
|
data class R<T>(
|
||||||
val code: Int,
|
val code: Int,
|
||||||
@ -29,50 +18,47 @@ data class R<T>(
|
|||||||
val message: String,
|
val message: String,
|
||||||
val data: T? = null,
|
val data: T? = null,
|
||||||
val requestId: String? = null,
|
val requestId: String? = null,
|
||||||
val nameMap: Map<String, String> = mapOf(
|
val extra: Map<String, Any?> = emptyMap() // ✅ 扩展字段保存位置
|
||||||
"code" to "code",
|
|
||||||
"success" to "success",
|
|
||||||
"message" to "message",
|
|
||||||
"data" to "data"
|
|
||||||
)
|
|
||||||
) {
|
) {
|
||||||
/**
|
/**
|
||||||
* 将响应对象转换为Map对象
|
* 转换为可变 Map,包含 extra 中的字段
|
||||||
*
|
|
||||||
* 此方法用于将响应对象转换为Map,方便在不同层次中传递和处理响应信息
|
|
||||||
* 同时,它允许通过[ResultExtender]来进一步扩展响应信息
|
|
||||||
*
|
|
||||||
* @param extenders 结果扩展器列表,默认为空
|
|
||||||
* @return 转换后的Map对象
|
|
||||||
*/
|
*/
|
||||||
fun toMap(extenders: List<ResultExtender> = emptyList()): MutableMap<String, Any?> {
|
fun toMutableFlatMap(): MutableMap<String, Any?> {
|
||||||
val r = mutableMapOf(
|
val map = mutableMapOf(
|
||||||
"code" to code,
|
"code" to code,
|
||||||
"success" to success,
|
"success" to success,
|
||||||
"message" to message,
|
"message" to message,
|
||||||
"data" to data
|
"data" to data
|
||||||
)
|
)
|
||||||
if (!requestId.isNullOrBlank()) {
|
if (!requestId.isNullOrBlank()) {
|
||||||
r["requestId"] = requestId
|
map["requestId"] = requestId
|
||||||
}
|
}
|
||||||
extenders.forEach { it.extend(r) }
|
map.putAll(extra) // ✅ 扁平化合并
|
||||||
return r
|
return map
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建成功地响应对象
|
* 转换为不可变 Map,包含 extra 中的字段
|
||||||
*
|
*/
|
||||||
* 该方法用于根据[ResponseInformation]创建一个成功地响应对象
|
fun toFlatMap(): Map<String, Any?> = toMutableFlatMap().toMap()
|
||||||
* 它支持国际化消息解析和请求ID的生成,并允许通过[ResultExtender]来扩展响应信息
|
|
||||||
|
companion object {
|
||||||
|
private fun buildExtraMap(extenders: List<ResultExtender>): Map<String, Any?> {
|
||||||
|
return mutableMapOf<String, Any?>().apply {
|
||||||
|
extenders.forEach { it.extend(this) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建成功响应对象
|
||||||
*
|
*
|
||||||
* @param info 响应信息对象
|
* @param info 响应信息对象
|
||||||
* @param data 响应数据体,默认为null
|
* @param data 响应数据
|
||||||
* @param messageResolver 消息解析器,默认为[DefaultMessageResolver]
|
* @param messageResolver 消息解析器
|
||||||
* @param requestIdProvider 请求ID提供者,默认为[DefaultRequestIdProvider]
|
* @param i18bArgs 国际化参数
|
||||||
* @param extenders 结果扩展器列表,默认为空
|
* @param requestIdProvider 请求ID提供者
|
||||||
* @return 创建的响应对象
|
* @param extenders 扩展信息提供者列表
|
||||||
|
* @return 成功响应对象
|
||||||
*/
|
*/
|
||||||
fun <T> success(
|
fun <T> success(
|
||||||
info: ResponseInformation,
|
info: ResponseInformation,
|
||||||
@ -82,28 +68,22 @@ data class R<T>(
|
|||||||
requestIdProvider: RequestIdProvider? = null,
|
requestIdProvider: RequestIdProvider? = null,
|
||||||
extenders: List<ResultExtender> = emptyList()
|
extenders: List<ResultExtender> = emptyList()
|
||||||
): R<T> {
|
): R<T> {
|
||||||
val msg = (messageResolver ?: DefaultMessageResolver).resolve(
|
val msg = (messageResolver ?: DefaultMessageResolver).resolve(info.responseI8nMessageCode, i18bArgs)
|
||||||
info.responseI8nMessageCode,
|
|
||||||
i18bArgs
|
|
||||||
)
|
|
||||||
val reqId = (requestIdProvider ?: DefaultRequestIdProvider).getRequestId()
|
val reqId = (requestIdProvider ?: DefaultRequestIdProvider).getRequestId()
|
||||||
return R(info.responseCode, true, msg, data, reqId).also {
|
val extra = buildExtraMap(extenders)
|
||||||
extenders.forEach { extender -> extender.extend(it.toMap()) }
|
return R(info.responseCode, true, msg, data, reqId, extra)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建失败的响应对象
|
* 创建失败响应对象
|
||||||
*
|
|
||||||
* 该方法用于根据[ResponseInformation]创建一个失败的响应对象
|
|
||||||
* 它支持国际化消息解析和请求ID的生成,并允许通过[ResultExtender]来扩展响应信息
|
|
||||||
*
|
*
|
||||||
* @param info 响应信息对象
|
* @param info 响应信息对象
|
||||||
* @param data 响应数据体,默认为null
|
* @param data 响应数据
|
||||||
* @param messageResolver 消息解析器,默认为[DefaultMessageResolver]
|
* @param messageResolver 消息解析器
|
||||||
* @param requestIdProvider 请求ID提供者,默认为[DefaultRequestIdProvider]
|
* @param i18bArgs 国际化参数
|
||||||
* @param extenders 结果扩展器列表,默认为空
|
* @param requestIdProvider 请求ID提供者
|
||||||
* @return 创建的响应对象
|
* @param extenders 扩展信息提供者列表
|
||||||
|
* @return 失败响应对象
|
||||||
*/
|
*/
|
||||||
fun <T> failure(
|
fun <T> failure(
|
||||||
info: ResponseInformation,
|
info: ResponseInformation,
|
||||||
@ -113,77 +93,64 @@ data class R<T>(
|
|||||||
requestIdProvider: RequestIdProvider? = null,
|
requestIdProvider: RequestIdProvider? = null,
|
||||||
extenders: List<ResultExtender> = emptyList()
|
extenders: List<ResultExtender> = emptyList()
|
||||||
): R<T> {
|
): R<T> {
|
||||||
val msg = (messageResolver ?: DefaultMessageResolver).resolve(
|
val msg = (messageResolver ?: DefaultMessageResolver).resolve(info.responseI8nMessageCode, i18bArgs)
|
||||||
info.responseI8nMessageCode,
|
|
||||||
i18bArgs
|
|
||||||
)
|
|
||||||
val reqId = (requestIdProvider ?: DefaultRequestIdProvider).getRequestId()
|
val reqId = (requestIdProvider ?: DefaultRequestIdProvider).getRequestId()
|
||||||
return R(info.responseCode, false, msg, data, reqId).also {
|
val extra = buildExtraMap(extenders)
|
||||||
extenders.forEach { extender -> extender.extend(it.toMap()) }
|
return R(info.responseCode, false, msg, data, reqId, extra)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建成功地响应对象
|
* 创建成功响应对象
|
||||||
*
|
*
|
||||||
* 该方法用于创建一个简单的成功响应对象,支持自定义状态码、消息代码、消息参数和数据体
|
* @param code 响应码
|
||||||
* 它支持国际化消息解析和请求ID的生成,并允许通过[ResultExtender]来扩展响应信息
|
* @param messageCode 消息码
|
||||||
*
|
* @param data 响应数据
|
||||||
* @param code 状态码,默认为200
|
* @param i18nArgs 国际化参数
|
||||||
* @param messageCode 消息代码,默认为"success"
|
* @param messageResolver 消息解析器
|
||||||
* @param args 消息参数,默认为null
|
* @param requestIdProvider 请求ID提供者
|
||||||
* @param data 响应数据体,默认为null
|
* @param extenders 扩展信息提供者列表
|
||||||
* @param messageResolver 消息解析器,默认为[DefaultMessageResolver]
|
* @return 成功响应对象
|
||||||
* @param requestIdProvider 请求ID提供者,默认为[DefaultRequestIdProvider]
|
|
||||||
* @param extenders 结果扩展器列表,默认为空
|
|
||||||
* @return 创建的响应对象
|
|
||||||
*/
|
*/
|
||||||
fun <T> success(
|
fun <T> success(
|
||||||
code: Int = 200,
|
code: Int = 200,
|
||||||
messageCode: String = "success",
|
messageCode: String = "success",
|
||||||
data: T? = null,
|
data: T? = null,
|
||||||
i18bArgs: Array<Any>? = null,
|
i18nArgs: Array<Any>? = null,
|
||||||
messageResolver: MessageResolver? = null,
|
messageResolver: MessageResolver? = null,
|
||||||
requestIdProvider: RequestIdProvider? = null,
|
requestIdProvider: RequestIdProvider? = null,
|
||||||
extenders: List<ResultExtender> = emptyList()
|
extenders: List<ResultExtender> = emptyList()
|
||||||
): R<T> {
|
): R<T> {
|
||||||
val msg = (messageResolver ?: DefaultMessageResolver).resolve(messageCode, i18bArgs)
|
val msg = (messageResolver ?: DefaultMessageResolver).resolve(messageCode, i18nArgs)
|
||||||
val reqId = (requestIdProvider ?: DefaultRequestIdProvider).getRequestId()
|
val reqId = (requestIdProvider ?: DefaultRequestIdProvider).getRequestId()
|
||||||
return R(code, true, msg, data, reqId).also {
|
val extra = buildExtraMap(extenders)
|
||||||
extenders.forEach { extender -> extender.extend(it.toMap()) }
|
return R(code, true, msg, data, reqId, extra)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建失败的响应对象
|
* 创建失败响应对象
|
||||||
*
|
*
|
||||||
* 该方法用于创建一个简单的失败响应对象,支持自定义状态码、消息代码、消息参数和数据体
|
* @param code 响应码
|
||||||
* 它支持国际化消息解析和请求ID的生成,并允许通过[ResultExtender]来扩展响应信息
|
* @param messageCode 消息码
|
||||||
*
|
* @param data 响应数据
|
||||||
* @param code 状态码,默认为400
|
* @param i18nArgs 国际化参数
|
||||||
* @param messageCode 消息代码,默认为"error"
|
* @param messageResolver 消息解析器
|
||||||
* @param args 消息参数,默认为null
|
* @param requestIdProvider 请求ID提供者
|
||||||
* @param data 响应数据体,默认为null
|
* @param extenders 扩展信息提供者列表
|
||||||
* @param messageResolver 消息解析器,默认为[DefaultMessageResolver]
|
* @return 失败响应对象
|
||||||
* @param requestIdProvider 请求ID提供者,默认为[DefaultRequestIdProvider]
|
|
||||||
* @param extenders 结果扩展器列表,默认为空
|
|
||||||
* @return 创建的响应对象
|
|
||||||
*/
|
*/
|
||||||
fun <T> failure(
|
fun <T> failure(
|
||||||
code: Int = 400,
|
code: Int = 400,
|
||||||
messageCode: String = "error",
|
messageCode: String = "error",
|
||||||
data: T? = null,
|
data: T? = null,
|
||||||
i18bArgs: Array<Any>? = null,
|
i18nArgs: Array<Any>? = null,
|
||||||
messageResolver: MessageResolver? = null,
|
messageResolver: MessageResolver? = null,
|
||||||
requestIdProvider: RequestIdProvider? = null,
|
requestIdProvider: RequestIdProvider? = null,
|
||||||
extenders: List<ResultExtender> = emptyList()
|
extenders: List<ResultExtender> = emptyList()
|
||||||
): R<T> {
|
): R<T> {
|
||||||
val msg = (messageResolver ?: DefaultMessageResolver).resolve(messageCode, i18bArgs)
|
val msg = (messageResolver ?: DefaultMessageResolver).resolve(messageCode, i18nArgs)
|
||||||
val reqId = (requestIdProvider ?: DefaultRequestIdProvider).getRequestId()
|
val reqId = (requestIdProvider ?: DefaultRequestIdProvider).getRequestId()
|
||||||
return R(code, false, msg, data, reqId).also {
|
val extra = buildExtraMap(extenders)
|
||||||
extenders.forEach { extender -> extender.extend(it.toMap()) }
|
return R(code, false, msg, data, reqId, extra)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@ -10,7 +10,7 @@ kotlinxSerializationJSON-version = "1.7.3"
|
|||||||
axion-release-version = "1.18.7"
|
axion-release-version = "1.18.7"
|
||||||
spring-cloud-version = "2024.0.1"
|
spring-cloud-version = "2024.0.1"
|
||||||
spring-boot-version = "3.4.4"
|
spring-boot-version = "3.4.4"
|
||||||
|
latest-release="latest.release"
|
||||||
slf4j-version = "2.0.17"
|
slf4j-version = "2.0.17"
|
||||||
[libraries]
|
[libraries]
|
||||||
kotlinGradlePlugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin-version" }
|
kotlinGradlePlugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin-version" }
|
||||||
@ -32,11 +32,21 @@ springBoot-configuration-processor = { group = "org.springframework.boot", name
|
|||||||
springCloudDependencies-bom = { module = "org.springframework.cloud:spring-cloud-dependencies", version.ref = "spring-cloud-version" }
|
springCloudDependencies-bom = { module = "org.springframework.cloud:spring-cloud-dependencies", version.ref = "spring-cloud-version" }
|
||||||
springCloudStarter-openfeign = { group = "org.springframework.cloud", name = "spring-cloud-starter-openfeign" }
|
springCloudStarter-openfeign = { group = "org.springframework.cloud", name = "spring-cloud-starter-openfeign" }
|
||||||
|
|
||||||
|
# Jackson
|
||||||
|
jackson-core={group="com.fasterxml.jackson.core", name="jackson-core"}
|
||||||
|
jackson-databind={group="com.fasterxml.jackson.core", name="jackson-databind"}
|
||||||
|
jackson-annotations={group="com.fasterxml.jackson.core", name="jackson-annotations"}
|
||||||
|
jackson-datatype-jsr310={group="com.fasterxml.jackson.datatype", name="jackson-datatype-jsr310"}
|
||||||
|
jackson-module-kotlin={group="com.fasterxml.jackson.module", name="jackson-module-kotlin"}
|
||||||
|
|
||||||
reactor-core={group="io.projectreactor", name="reactor-core"}
|
reactor-core={group="io.projectreactor", name="reactor-core"}
|
||||||
# Libraries can be bundled together for easier import
|
# Libraries can be bundled together for easier import
|
||||||
|
|
||||||
[bundles]
|
[bundles]
|
||||||
kotlinxEcosystem = ["kotlinxDatetime", "kotlinxSerialization", "kotlinxCoroutines-core"]
|
kotlinxEcosystem = ["kotlinxDatetime", "kotlinxSerialization", "kotlinxCoroutines-core"]
|
||||||
|
jacksonAll = [
|
||||||
|
"jackson-core", "jackson-databind", "jackson-annotations","jackson-datatype-jsr310", "jackson-module-kotlin"
|
||||||
|
]
|
||||||
[plugins]
|
[plugins]
|
||||||
# 应用 Java 插件,提供基本的 Java 代码编译和构建能力
|
# 应用 Java 插件,提供基本的 Java 代码编译和构建能力
|
||||||
java = { id = "java" }
|
java = { id = "java" }
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user