当前位置: 首页 > 知识库问答 >
问题:

Jersey:如何将MediaType设置为javax。ws。rs.core。响应,如果真实的“物理”响应头没有任何相关信息

裴硕
2023-03-14

当我向服务器发送请求时

...
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);
...

最后一行的泽西抛出异常

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>

标头不包含有关MediaType的任何信息。

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

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

共有1个答案

麻烨
2023-03-14

尝试通过调用Web塔吉特#请求(MediaType)接受标头添加到您的请求中,

ClientBuilder.newClient()
    .target("mytarget")
    .request("application/xml")
    .method(req.getMethod(), Entity.entity(req, req.getMediaType()));

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

Response response = ...;
response.getStringHeaders().putSingle(HttpHeaders.CONTENT_TYPE, "text/plain");
T resp = response.readEntity(respType);
 类似资料:
  • 问题内容: 这是我的代码: 但是,当我从浏览器向服务器发出请求时,出现此错误: 我也尝试过这种方法,在请求之后设置响应头: 没有骰子。我犯了同样的错误。有没有一种方法可以只在route函数中设置响应头?这样的事情将是理想的: 但我还是找不到这样做。请帮忙。 编辑 如果我使用POST请求卷曲URL,如下所示: 我得到这个回应: 有任何想法吗? 问题答案: 你可以很容易地做到这一点: 查看和 但是有些

  • 我有一个无服务器API,它与无服务器框架版本1.25一起工作 由于安全原因,我想添加响应头。请帮助我如何通过serverless.yml文件设置下面的标题。出于安全考虑,有必要添加此标题吗? 内容-安全-策略:包括默认-src“自我” •严格的交通安全最大年龄=31536000;包括子域;预载 •X-Content-Type-Options:nosniff •X-XSS-保护:1 •缓存控制:最大

  • 问题内容: 我希望我的div调整其高度以使其始终等于其宽度。宽度为百分比。当父母的宽度减小时,盒子应通过保持其纵横比减小。 CSS是怎么做到的? 问题答案: 要实现所需的功能,可以使用viewport-percentagelength 。 这是我在jsfiddle上制作的一个简单示例。 HTML: CSS: 我敢肯定还有很多其他方法可以做到这一点,但是这种方法对我来说似乎是最好的。

  • 问题内容: 我从API的响应中收到X-Frame- Options标头,但据我所知,为了防止clickjacking攻击,我需要在UI代码中添加它。UI代码(用angularjs编写)部署在Tomcat(版本7.0.72)服务器中。我尝试在应用程序的web.xml中添加以下过滤器。 但是,我看不到标题被添加。有人可以帮我找出解决方案吗? 问题答案: 我找到了解决方案。X-Frame- Option

  • 我非常确定“Expires”是有效的HTTP响应头类型。但是当我尝试在代码中设置它时:(这是在ActionFilter.OnActionExecuted方法中) 我最后有一个例外: InvalidOperationException:错误使用的标头名称。确保请求头与HttpRequestMessage一起使用,响应头与HttpResponseMessage一起使用,内容头与HttpContent对

  • 我正在尝试我的first REST应用程序。 以下是我的配置: Java 7 以下是Maven下载的罐子列表: 在服务器启动时,出现以下异常: 根据上面的日志,ApplicationHandler。init()方法正在调用应用程序。getProperties()。 ApplicationHandler位于jersey-server-2.22.2中。jar和应用程序在javax中。ws。rs-api