mirror of
https://github.moeyy.xyz/https://github.com/GeWuYou/forgeboot
synced 2025-10-28 01:58:54 +08:00
feat(webmvc-dto): Add a pagination extension function and update internationalization support - A new PageExtension.kt file has been added to provide conversion from Page objects to PageResult objects
- Added the PageResultExtension.kt file to provide the mapping and conversion function of pagination results - Updated internationalization message references in the DeleteByIdsReq and PageQueryReq files - Modify the R.kt file to add default success and failure response information objects - Simplified project structure by removing redundant internationalized message files
This commit is contained in:
parent
d357a3d754
commit
ff8593007d
@ -12,4 +12,6 @@ dependencies {
|
||||
}
|
||||
i18nKeyGen {
|
||||
rootPackage.set("com.gewuyou.forgeboot.webmvc.dto.i18n")
|
||||
level.set(3)
|
||||
readPath.set("src/main/resources/i18n/${project.name}")
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ package com.gewuyou.forgeboot.webmvc.dto
|
||||
import com.gewuyou.forgeboot.i18n.api.MessageResolver
|
||||
import com.gewuyou.forgeboot.i18n.api.ResponseInformation
|
||||
import com.gewuyou.forgeboot.trace.api.RequestIdProvider
|
||||
import com.gewuyou.forgeboot.webmvc.dto.i18n.I18nKeys
|
||||
|
||||
|
||||
/**
|
||||
@ -22,6 +23,71 @@ val DefaultRequestIdProvider : RequestIdProvider = RequestIdProvider{""}
|
||||
*/
|
||||
val DefaultMessageResolver : MessageResolver = MessageResolver { code, _ -> code }
|
||||
|
||||
/**
|
||||
* 默认成功i18n响应信息对象
|
||||
*
|
||||
* 提供标准的成功响应定义,包含国际化支持
|
||||
* 响应码为200,表示操作成功
|
||||
* i18n消息码用于查找本地化文本
|
||||
*
|
||||
* @since 2025-05-03 16:23:00
|
||||
* @author gewuyou
|
||||
*/
|
||||
val defaultOkI18nResponseInformation: ResponseInformation = object : ResponseInformation {
|
||||
/**
|
||||
* 获取响应码
|
||||
* @return 响应码
|
||||
*/
|
||||
override val responseCode: Int
|
||||
get() = 200
|
||||
|
||||
/**
|
||||
* 获取i18n响应信息code
|
||||
* @return 响应信息 code
|
||||
*/
|
||||
override val responseI8nMessageCode: String
|
||||
get() = I18nKeys.Forgeboot.Webmvc.Dto.RESULT_RESPONSEINFO_OK
|
||||
|
||||
/**
|
||||
* 获取i18n响应信息参数
|
||||
* @return 响应信息 参数数组
|
||||
*/
|
||||
override val responseI8nMessageArgs: Array<Any>?
|
||||
get() = arrayOf()
|
||||
}
|
||||
|
||||
/**
|
||||
* 默认失败i18n响应信息对象
|
||||
*
|
||||
* 提供标准的失败响应定义,包含国际化支持
|
||||
* 响应码为400,表示请求错误
|
||||
* i18n消息码用于查找本地化文本
|
||||
*
|
||||
* @since 2025-05-03 16:23:15
|
||||
* @author gewuyou
|
||||
*/
|
||||
val defaultFailureI18nResponseInformation: ResponseInformation = object : ResponseInformation {
|
||||
/**
|
||||
* 获取响应码
|
||||
* @return 响应码
|
||||
*/
|
||||
override val responseCode: Int
|
||||
get() = 400
|
||||
|
||||
/**
|
||||
* 获取i18n响应信息code
|
||||
* @return 响应信息 code
|
||||
*/
|
||||
override val responseI8nMessageCode: String
|
||||
get() = I18nKeys.Forgeboot.Webmvc.Dto.RESULT_RESPONSEINFO_FAIL
|
||||
|
||||
/**
|
||||
* 获取i18n响应信息参数
|
||||
* @return 响应信息 参数数组
|
||||
*/
|
||||
override val responseI8nMessageArgs: Array<Any>?
|
||||
get() = arrayOf()
|
||||
}
|
||||
/**
|
||||
* 结果扩展器
|
||||
*
|
||||
@ -91,20 +157,18 @@ data class R<T>(
|
||||
* @param info 响应信息对象
|
||||
* @param data 响应数据
|
||||
* @param messageResolver 消息解析器
|
||||
* @param i18bArgs 国际化参数
|
||||
* @param requestIdProvider 请求ID提供者
|
||||
* @param extenders 扩展信息提供者列表
|
||||
* @return 成功响应对象
|
||||
*/
|
||||
fun <T> success(
|
||||
info: ResponseInformation,
|
||||
info: ResponseInformation = defaultOkI18nResponseInformation,
|
||||
data: T? = null,
|
||||
messageResolver: MessageResolver? = null,
|
||||
i18bArgs: Array<Any>? = null,
|
||||
requestIdProvider: RequestIdProvider? = null,
|
||||
extenders: List<ResultExtender> = emptyList(),
|
||||
): R<T> {
|
||||
val msg = (messageResolver ?: DefaultMessageResolver).resolve(info.responseI8nMessageCode, i18bArgs)
|
||||
val msg = (messageResolver ?: DefaultMessageResolver).resolve(info.responseI8nMessageCode, info.responseI8nMessageArgs)
|
||||
val reqId = (requestIdProvider ?: DefaultRequestIdProvider).getRequestId()
|
||||
val extra = buildExtraMap(extenders)
|
||||
return R(info.responseCode, true, msg, data, reqId, extra)
|
||||
@ -116,20 +180,18 @@ data class R<T>(
|
||||
* @param info 响应信息对象
|
||||
* @param data 响应数据
|
||||
* @param messageResolver 消息解析器
|
||||
* @param i18bArgs 国际化参数
|
||||
* @param requestIdProvider 请求ID提供者
|
||||
* @param extenders 扩展信息提供者列表
|
||||
* @return 失败响应对象
|
||||
*/
|
||||
fun <T> failure(
|
||||
info: ResponseInformation,
|
||||
info: ResponseInformation = defaultFailureI18nResponseInformation,
|
||||
data: T? = null,
|
||||
messageResolver: MessageResolver? = null,
|
||||
i18bArgs: Array<Any>? = null,
|
||||
requestIdProvider: RequestIdProvider? = null,
|
||||
extenders: List<ResultExtender> = emptyList(),
|
||||
): R<T> {
|
||||
val msg = (messageResolver ?: DefaultMessageResolver).resolve(info.responseI8nMessageCode, i18bArgs)
|
||||
val msg = (messageResolver ?: DefaultMessageResolver).resolve(info.responseI8nMessageCode, info.responseI8nMessageArgs)
|
||||
val reqId = (requestIdProvider ?: DefaultRequestIdProvider).getRequestId()
|
||||
val extra = buildExtraMap(extenders)
|
||||
return R(info.responseCode, false, msg, data, reqId, extra)
|
||||
|
||||
@ -0,0 +1,26 @@
|
||||
package com.gewuyou.forgeboot.webmvc.dto.extension
|
||||
|
||||
import com.gewuyou.forgeboot.webmvc.dto.PageResult
|
||||
import org.springframework.data.domain.Page
|
||||
|
||||
/**
|
||||
* 分页扩展
|
||||
*
|
||||
* 该扩展函数用于将Spring Data的Page对象转换为自定义的PageResult对象
|
||||
* 主要目的是为了统一分页数据的封装格式,便于在不同层次之间传递和使用
|
||||
*
|
||||
* @param <T> 泛型参数,表示分页数据中的具体类型
|
||||
* @return 返回转换后的PageResult对象,包含分页查询的结果
|
||||
* @since 2025-05-29 21:51:52
|
||||
* @author gewuyou
|
||||
*/
|
||||
fun <T> Page<T>.toPageResult(): PageResult<T> {
|
||||
// 将当前分页信息和数据内容封装到自定义的PageResult对象中
|
||||
return PageResult.of(
|
||||
currentPage = this.number.toLong(),
|
||||
pageSize = this.size.toLong(),
|
||||
totalRecords = this.totalElements,
|
||||
records = this.content
|
||||
)
|
||||
}
|
||||
|
||||
@ -0,0 +1,23 @@
|
||||
package com.gewuyou.forgeboot.webmvc.dto.extension
|
||||
|
||||
import com.gewuyou.forgeboot.webmvc.dto.PageResult
|
||||
|
||||
/**
|
||||
* 分页结果扩展
|
||||
*
|
||||
* 该扩展函数用于将分页结果中的每个元素转换为另一种类型,同时保持分页信息不变
|
||||
* 它接受一个转换函数作为参数,该函数定义了如何将分页结果中的每个元素从类型 T 转换为类型 R
|
||||
*
|
||||
* @param transform 转换函数,用于将分页结果中的每个元素从类型 T 转换为类型 R
|
||||
* @return 返回一个新的分页结果对象,其中包含转换后的元素
|
||||
* @since 2025-05-29 22:05:37
|
||||
* @author gewuyou
|
||||
*/
|
||||
fun <T, R> PageResult<T>.map(transform: (T) -> R): PageResult<R> {
|
||||
return PageResult.of(
|
||||
currentPage = this.currentPage,
|
||||
pageSize = this.pageSize,
|
||||
totalRecords = this.totalRecords,
|
||||
records = this.records?.map(transform)?.toMutableList() ?: mutableListOf()
|
||||
)
|
||||
}
|
||||
@ -23,6 +23,6 @@ class DeleteByIdsReq<T>(
|
||||
*
|
||||
* @param ids 实体的唯一标识符列表,用于指定哪些实体应当被删除
|
||||
*/
|
||||
@field:NotEmpty(message = I18nKeys.Forgeboot.Dto.DELETE_IDS_NOTNOTEMPTY)
|
||||
@field:NotEmpty(message = I18nKeys.Forgeboot.Webmvc.Dto.DELETE_IDS_NOT_EMPTY)
|
||||
var ids: List<T>,
|
||||
)
|
||||
@ -22,13 +22,13 @@ open class PageQueryReq<T> {
|
||||
/**
|
||||
* 当前页码(默认1)
|
||||
*/
|
||||
@field:Min(1, message = I18nKeys.Forgeboot.Dto.PAGEQUERY_CURRENTPAGE_MIN )
|
||||
@field:Min(1, message = I18nKeys.Forgeboot.Webmvc.Dto.PAGE_QUERY_CURRENT_PAGE_MIN )
|
||||
var currentPage: Int = 1
|
||||
|
||||
/**
|
||||
* 每页条数(默认10)
|
||||
*/
|
||||
@field:Min(1, message = I18nKeys.Forgeboot.Dto.PAGEQUERY_PAGESIZE_MIN)
|
||||
@field:Min(1, message = I18nKeys.Forgeboot.Webmvc.Dto.PAGE_QUERY_PAGE_SIZE_MIN)
|
||||
var pageSize: Int = 10
|
||||
|
||||
/**
|
||||
|
||||
@ -1,3 +0,0 @@
|
||||
forgeboot.dto.delete.ids.notNotEmpty=请求删除的id列表不能为空\!
|
||||
forgeboot.dto.pageQuery.currentPage.min=当前页码不得小于1页\!
|
||||
forgeboot.dto.pageQuery.pageSize.min=每页条数不得小于1页\!
|
||||
@ -1,3 +0,0 @@
|
||||
forgeboot.dto.delete.ids.notNotEmpty=The list of IDs requested to be removed cannot be empty\!
|
||||
forgeboot.dto.pageQuery.currentPage.min=The current page number must not be less than 1 page\!
|
||||
forgeboot.dto.pageQuery.pageSize.min=The number of entries per page shall not be less than 1 page\!
|
||||
@ -1,3 +0,0 @@
|
||||
forgeboot.dto.delete.ids.notNotEmpty=请求删除的id列表不能为空\!
|
||||
forgeboot.dto.pageQuery.currentPage.min=当前页码不得小于1页\!
|
||||
forgeboot.dto.pageQuery.pageSize.min=每页条数不得小于1页\!
|
||||
Loading…
x
Reference in New Issue
Block a user