mirror of
				https://github.moeyy.xyz/https://github.com/GeWuYou/forgeboot
				synced 2025-10-28 08:58:52 +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 | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * 转换为不可变 Map,包含 extra 中的字段 | ||||||
|  |      */ | ||||||
|  |     fun toFlatMap(): Map<String, Any?> = toMutableFlatMap().toMap() | ||||||
|  | 
 | ||||||
|     companion object { |     companion object { | ||||||
|  |         private fun buildExtraMap(extenders: List<ResultExtender>): Map<String, Any?> { | ||||||
|  |             return mutableMapOf<String, Any?>().apply { | ||||||
|  |                 extenders.forEach { it.extend(this) } | ||||||
|  |             } | ||||||
|  |         } | ||||||
| 
 | 
 | ||||||
|         /** |         /** | ||||||
|          * 创建成功地响应对象 |          * 创建成功响应对象 | ||||||
|          * |  | ||||||
|          * 该方法用于根据[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> 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