Skip to content

Commit 7a10732

Browse files
committed
refactor(basis): 合并工具类
1 parent 79b247b commit 7a10732

File tree

3 files changed

+59
-107
lines changed

3 files changed

+59
-107
lines changed

mumu-basis/src/main/java/baby/mumu/basis/tools/FileDownloadUtils.java

-106
This file was deleted.

mumu-basis/src/main/kotlin/baby/mumu/basis/kotlin/tools/FileDownloadUtils.kt

+58
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ package baby.mumu.basis.kotlin.tools
1717

1818
import baby.mumu.basis.exception.MuMuException
1919
import baby.mumu.basis.response.ResponseCode
20+
import com.fasterxml.jackson.databind.ObjectMapper
21+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
2022
import com.opencsv.CSVWriter
2123
import com.opencsv.bean.StatefulBeanToCsvBuilder
2224
import jakarta.servlet.http.HttpServletResponse
@@ -25,6 +27,8 @@ import org.apiguardian.api.API
2527
import org.springframework.http.HttpHeaders
2628
import org.springframework.http.MediaType
2729
import org.springframework.util.Assert
30+
import org.zalando.jackson.datatype.money.MoneyModule
31+
import java.io.IOException
2832
import java.io.InputStream
2933
import java.io.OutputStreamWriter
3034
import java.net.URLEncoder
@@ -160,6 +164,60 @@ object FileDownloadUtils {
160164
}
161165
}
162166

167+
@JvmStatic
168+
@API(status = API.Status.STABLE, since = "2.7.0")
169+
fun <T> downloadJson(
170+
response: HttpServletResponse,
171+
fileName: String,
172+
stream: Stream<T>
173+
) {
174+
var fileName = fileName
175+
try {
176+
Assert.isTrue(StringUtils.isNotBlank(fileName), "fileName must not be blank")
177+
if (!fileName.endsWith(".json")) {
178+
fileName += ".json"
179+
}
180+
// 创建 ObjectMapper 实例
181+
val objectMapper = ObjectMapper()
182+
// 注册模块(例如时间模块和Money模块)
183+
objectMapper.registerModule(JavaTimeModule())
184+
objectMapper.registerModule(MoneyModule())
185+
186+
// 创建 ObjectWriter 实例
187+
val objectWriter = objectMapper.writerWithDefaultPrettyPrinter()
188+
189+
// 获取 JSON 生成器
190+
val generator = objectMapper.factory
191+
.createGenerator(response.outputStream)
192+
generator.useDefaultPrettyPrinter()
193+
194+
// 设置响应头
195+
response.contentType = MediaType.APPLICATION_JSON_VALUE
196+
response.setHeader(
197+
HttpHeaders.CONTENT_DISPOSITION,
198+
"attachment; filename=" + encodeFileName(fileName)
199+
)
200+
201+
// 写入 JSON 数组开始符
202+
generator.writeStartArray()
203+
204+
// 遍历流并写入 JSON 对象
205+
stream.forEach { obj: T ->
206+
try {
207+
objectWriter.writeValue(generator, obj)
208+
} catch (_: IOException) {
209+
throw MuMuException(ResponseCode.FILE_DOWNLOAD_FAILED)
210+
}
211+
}
212+
// 写入 JSON 数组结束符
213+
generator.writeEndArray()
214+
// 关闭生成器
215+
generator.close()
216+
} catch (_: java.lang.Exception) {
217+
throw MuMuException(ResponseCode.FILE_DOWNLOAD_FAILED)
218+
}
219+
}
220+
163221
/**
164222
* 处理文件名编码,避免中文或特殊字符导致文件名下载异常
165223
*

mumu-services/mumu-authentication/authentication-application/src/main/java/baby/mumu/authentication/application/permission/executor/PermissionIncludePathDownloadAllCmdExe.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
import baby.mumu.authentication.domain.permission.gateway.PermissionGateway;
1919
import baby.mumu.authentication.infrastructure.permission.convertor.PermissionConvertor;
20-
import baby.mumu.basis.tools.FileDownloadUtils;
20+
import baby.mumu.basis.kotlin.tools.FileDownloadUtils;
2121
import io.micrometer.observation.annotation.Observed;
2222
import jakarta.servlet.http.HttpServletResponse;
2323
import org.springframework.beans.factory.annotation.Autowired;

0 commit comments

Comments
 (0)