使用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
相关产品推荐
相关产品推荐

