Java 返回文件或纯文本
我必须创建一个RESTWeb服务,其中用户可以使用url访问数据。Url有一个名为Java 返回文件或纯文本,java,rest,jax-rs,Java,Rest,Jax Rs,我必须创建一个RESTWeb服务,其中用户可以使用url访问数据。Url有一个名为format的查询参数,可以是text或file。如果用户选择文本作为格式,则我必须将文本数据返回浏览器,或者如果用户选择文件作为格式,则返回文件供用户下载。我怎样才能做到这一点 到目前为止我所尝试的(不起作用): 上述代码format=text正常工作,但format=file抛出HTTP状态406 null错误 提前感谢您获得的HTTP状态为 406 Not Acceptable 引述: 根据请求中发送的Ac
format
的查询参数,可以是text
或file
。如果用户选择文本
作为格式
,则我必须将文本数据返回浏览器,或者如果用户选择文件
作为格式
,则返回文件供用户下载。我怎样才能做到这一点
到目前为止我所尝试的(不起作用):
上述代码format=text
正常工作,但format=file
抛出HTTP状态406 null
错误
提前感谢您获得的HTTP状态为
406 Not Acceptable
引述:
根据请求中发送的Accept标头,请求的资源只能生成不可接受的内容
因此,您的客户端不发送
Accept: text/plain
或
或任何组合。检查您的客户机及其发送的标题。您正在混合使用方法。第一种方法非常流行,但没有标准化,通过使用
format
参数在请求路径中提供预期结果的提示(顺便说一句,您可以使用@QueryParam(“format”)字符串格式,而不是从ServletRequest
中提取它)。第二种方法是HTTP内容协商机制,在本例中使用Accept/content-Type
头。这个机制由JAX-RS实现基于@products
注释和提供者类来处理
因此,现在用户不仅需要设置格式
,还需要设置接受
标题。似乎您正在使用设置接受
的客户端,其值之一是text/plain
。这就是为什么第一种情况是有效的,但是没有应用程序/octet流
或*/*
(全部),所以JAX-RS希望客户端无法处理这样的内容,而是向他发送一个错误406 not Acceptable
这里的解决方案是删除@products
注释(您是负责响应格式的人),或者删除format
参数,让JAX-RS完成工作(可能您需要注册自己的提供者)。但是,如果您坚持使用您的解决方案,那么请确保在请求中发送的是正确的或无接受标头(无标头的意思是:“我将接受您发送的任何内容”)
Accept: text/plain
Accept: application/octet-stream