Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 返回文件或纯文本_Java_Rest_Jax Rs - Fatal编程技术网

Java 返回文件或纯文本

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

我必须创建一个RESTWeb服务,其中用户可以使用url访问数据。Url有一个名为
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