Java Accept标头对HTTP GET请求中的二进制结果进行编码

Java Accept标头对HTTP GET请求中的二进制结果进行编码,java,jakarta-ee,jersey,resteasy,Java,Jakarta Ee,Jersey,Resteasy,我的API为GET请求返回一个Excel(xslx)文件。如果存在“Accept”标头,则二进制结果将被编码/损坏。我可以使用fiddler发送请求,并提供所需的最小标题,一切正常。如果像浏览器一样添加Accept标头: Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 结果变得更大(8kb而不是4kb),并且似乎以某种方式进行了编码。Fiddler检测到这种编码并要求解码。这样

我的API为GET请求返回一个Excel(xslx)文件。如果存在“Accept”标头,则二进制结果将被编码/损坏。我可以使用fiddler发送请求,并提供所需的最小标题,一切正常。如果像浏览器一样添加Accept标头:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
结果变得更大(8kb而不是4kb),并且似乎以某种方式进行了编码。Fiddler检测到这种编码并要求解码。这样解码后,结果再次有效。当我改用chrome浏览器时,它会下载更大(8kb)的文件,没有解码,因此会损坏

@GET
@Path("/export-report")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
//@Produces({ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" })
public Response exportReport() throws IOException {
    byte[] fileBytes = getFileBytes();
    String filename = "report.xslx";
    String mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

    return Response.ok()
            .header("Content-Disposition", "attachment; filename=\"" + filename + "\"")
            .header("Content-Length", fileBytes.length)
            .entity(fileBytes)
            .header("Content-Type", mimeType)
            .build();
}
我试着返回一个文件、一个输入流和一个字节数组,但没有改变任何事情

我还看了一眼


我没有解决方案,你知道吗?

你能粘贴“编码”输出的一小部分吗?听起来该文件可能是base64编码的,但我不确定我是否理解为什么会发生这种情况。在与其他服务相关的浏览器中遇到了类似的问题。似乎这个问题是由于接受有额外的细节,如/;q=0.8最后,您是否可以检查移除此零件是否有帮助