Java 是否可以使用jax rs POST方法发送两种不同的内容类型以下载文件

Java 是否可以使用jax rs POST方法发送两种不同的内容类型以下载文件,java,post,jersey,jax-rs,Java,Post,Jersey,Jax Rs,是否可以使用POST man为POST方法发送两种不同的内容类型?例如,如果该服务用于下载excel文件,那么在这种情况下,@Consumes(MediaType.APPLICATION\u JSON)用于发送一些JSON结构的用户详细信息,@Products(MediaType.APPLICATION\u OCTET\u STREAM)用于将响应作为文件发回。 注意:我不想使用表单数据,这是此服务的一个约束。在客户端请求中,标题仅用于实体主体中的数据类型。标题是您为想要返回的数据类型发送的内容

是否可以使用POST man为POST方法发送两种不同的内容类型?例如,如果该服务用于下载excel文件,那么在这种情况下,
@Consumes(MediaType.APPLICATION\u JSON)
用于发送一些JSON结构的用户详细信息,
@Products(MediaType.APPLICATION\u OCTET\u STREAM)
用于将响应作为文件发回。
注意:我不想使用表单数据,这是此服务的一个约束。

在客户端请求中,标题仅用于实体主体中的数据类型。标题是您为想要返回的数据类型发送的内容

在服务器端,执行以下操作完全可以

@POST
@Path("something")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response post(Model model) throws Exception {
    final InputStream in = new FileInputStream("path-to-file");
    StreamingOutput entity = new StreamingOutput() {
        @Override
        public void write(OutputStream out) {
            IOUtils.copy(in, out);
            out.flush();
        }
    };
    return Response.ok(entity)
            .header(HttpHeaders.CONTENT_DISPOSITION,
                    "attachment;filename=somefile.xls")
            .build();
}
对此终结点的请求应该如下所示

POST/api/something HTTP 1.1
内容类型:application/json;字符集=utf-8
接受:应用程序/八位字节流
{“the”:“json”,“entity”:“body”}
另请参见:

  • 关于
    @生产
    @消费
    的目的以及它们在内容协商中的作用

在一边

作为一个旁白,考虑使用<代码>应用程序/VND。MS Excel <代码>作为<代码>内容类型< /代码>,而不是<代码>应用程序/八位字节流< /代码>。这已经是Microsoft Excel文件1的标准MIME类型。当使用

StreamingOutput
作为响应实体类型时,您可以使
@生成您想要的任何内容,因为不需要真正的转换

在Postman中,当您使用“发送和下载”功能时,您会注意到当
内容类型
应用程序/octet流
时,在保存文件时,它会建议文件扩展名为
.bin
。但是如果您将
内容类型
设置为
应用程序/vnd.ms excel
,那么建议的扩展名是
.xls
,这就是它应该的扩展名



一,

您可以将相同的URL映射到GET、POST、DELETE…等等。在一个调用中,我尝试使用json并以文件的形式获取响应。创建一个POST方法<代码>返回响应.ok(fileStream,MediaType.APPLICATION_OCTET_STREAM).header(“内容处置”,“附件;文件名=myfile.xls”).build()
@SumeshTG当我从postman调用POST方法时,我得到如下响应��ࡱ�. 无法从postman调用文件下载功能吗?postman的发送和下载功能可用于此目的。当我使用postman调用此POST方法时,我的输出为:��ࡱ� 尽管有文件下载的弹出窗口。是的,它是一个二进制文件。你不会得到纯文本。您是否尝试在理解excel格式的程序中打开它?