Android使用Retrofit能否获取预览PDF响应?Postman正常但返回500问题求助
问题原因
- 最主要的问题是请求头配置错误:你在GET请求的接口上错误设置了
Content-Type: application/pdf请求头。Content-Type的作用是标识请求携带的请求体的媒体类型,而GET请求本身不存在请求体,服务端接收到不符合规则的请求头后会抛出解析异常,直接返回500状态码。 - Postman发起请求时会自动补全合理的请求头参数,所以相同参数的请求可以正常得到200响应。你实际需要的是声明客户端可接收的响应媒体类型,应该使用
Accept请求头而非Content-Type。
修复方案
- 首先修改ApiInterface中的请求头配置,将错误的
Content-Type替换为Accept头:
@Streaming @GET("SaleReport") @Headers({"Accept: application/pdf"}) Call<ResponseBody> getReport(@Header("Authorization") String token, @Query("SaleId") String saleId);
- 若修改后仍返回500,可以给Retrofit关联的OkHttp客户端添加日志拦截器,打印完整的请求报文,和Postman的请求报文逐行对比,排查以下常见问题:
- Authorization头的token值是否正确,有没有多余空格、大小写错误
- 传参的SaleId是否和Postman中的值完全一致,有没有被自动编码或添加多余字符
- 服务端如果有UA、Referer等额外请求头校验,参照Postman的配置补充对应请求头即可。
内容的提问来源于stack exchange,提问作者Iftakher Hasan
相关产品推荐
相关产品推荐

