You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Resteasy MicroProfile Rest Client下载PDF文件损坏问题求助

解决Resteasy MicroProfile Rest Client下载PDF损坏问题

问题核心

你遇到的问题是Rest Client将二进制PDF内容错误地按字符编码处理,导致原始字节被篡改。从字节数组对比能看到,Rest Client返回的结果中出现了-17, -65, -67(对应UTF-8替换字符�的字节序列),而curl获取的是正确的原始字节-30, -29, -49——这说明二进制数据在解析过程中被强制做了UTF-8编码转换,直接破坏了PDF的结构。

修复方案

1. 改用InputStream或Response作为返回类型

避免让Rest Client自动处理字节转换,直接获取原始响应流:

@GET
@Path("/download")
@Produces(MediaType.APPLICATION_PDF)
fun getDocument(): InputStream

或者使用Response手动读取实体:

@GET
@Path("/download")
@Produces(MediaType.APPLICATION_PDF)
fun getDocument(): Response

使用时直接提取原始字节:

val response = client.getDocument()
val pdfBytes = response.readEntity(ByteArray::class.java)
response.close()

2. 检查全局编码配置

如果项目中设置了Resteasy全局编码参数(比如resteasy.encoding.default),确保它不会影响application/pdf这类二进制媒体类型。可以针对PDF接口单独配置,禁用字符编码处理。

3. 验证修复效果

将获取到的字节数组写入文件后,对比curl下载文件的MD5或SHA哈希值,确认字节完全一致,即可验证PDF文件恢复正常。

内容的提问来源于stack exchange,提问作者brisssou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 08:03:19