Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
Jersey:如何将MediaType设置为javax.ws.rs.core.Response,如果是真的;“物理”;响应标头没有关于它的任何信息_Java_Rest_Http Headers_Jersey_Jax Rs - Fatal编程技术网

Jersey:如何将MediaType设置为javax.ws.rs.core.Response,如果是真的;“物理”;响应标头没有关于它的任何信息

Jersey:如何将MediaType设置为javax.ws.rs.core.Response,如果是真的;“物理”;响应标头没有关于它的任何信息,java,rest,http-headers,jersey,jax-rs,Java,Rest,Http Headers,Jersey,Jax Rs,当我向服务器发送请求时 ... Response response = builder.method(req.getMethod(), Entity.entity(req, req.getMediaType())); // req.getMediaType() return MediaType.APPLICATION_XML if(response.getStatus() != 200) throw new CoreErrorException("core resulted error w

当我向服务器发送请求时

...
Response response = builder.method(req.getMethod(), Entity.entity(req, req.getMediaType())); // req.getMediaType() return MediaType.APPLICATION_XML
if(response.getStatus() != 200)
   throw new CoreErrorException("core resulted error with status = " + response.getStatus());
T resp = response.readEntity(respType);
...
Jersey在最后一行抛出异常:

org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=application/octet-stream
我做了一些调查。首先,我得到了这样的回答:

Content-Length: 93
Date: Thu, 21 Nov 2013 12:53:46 GMT
Server: APP

<root>
   <returncode>XXX</returncode>
   <desc>some description</desc>
</root>
内容长度:93
日期:2013年11月21日星期四12:53:46 GMT
服务器:应用程序
XXX
一些描述
标头不包含任何有关MediaType的信息

实际上,当我尝试调用response.getMediaType()时,它返回null


我想,这就是问题所在。Jersey无法检测响应的MediaType并默认设置它(“应用程序/八位字节流”)。但实际上,我的回答的主体是XML。有什么方法可以告诉Jersey吗?

尝试通过调用
WebTarget\request(MediaType)
Accept
头添加到您的请求中

服务器是否向响应添加
内容类型
标题。如果没有,您可以尝试使用
WriterInterceptor
或通过调用

Response response = ...;
response.getStringHeaders().putSingle(HttpHeaders.CONTENT_TYPE, "text/plain");
T resp = response.readEntity(respType);

谢谢!第二个解决方案对我很有帮助。
Response response = ...;
response.getStringHeaders().putSingle(HttpHeaders.CONTENT_TYPE, "text/plain");
T resp = response.readEntity(respType);