泽西岛:如何将MediaType设置为javax.ws.rs.core.Response,如果实际的“物理”响应头没有任何相关信息 - java

当我向服务器发送请求时

...
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。

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

参考方案

尝试通过调用AcceptWebTarget#request(MediaType)标头添加到您的请求中,

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

服务器是否不将Content-Type标头添加到响应中。如果没有,您可以尝试使用WriterInterceptor或仅通过调用来更改客户端站点上的标头

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

如何从结果集中将数据从Oracle中获取到Java中的列表而没有循环? - java

如何从结果集中将数据从oracle中获取到Java中的列表而没有循环? 参考方案 你不能那样做。常用的做法是循环:while (rs.next()) { int value = rs.getInteger(1); } 等。唯一不循环的实用方法是接受结果集中只有一行。诸如Spring JDBC之类的框架可以为每个结果回调您的类,这意味着您无需显式循环,而是由框…

将生成的类放入不同的Web服务的同一包中 - java

我有几个JAX-WS Web服务,它们使用相同的类,但是从wsdl(在客户端)生成后,相同的类具有不同的包。我发现了如何使用@xmltype批注将它们放入同一包中。但是我不能使用它,因为源代码不可用。在服务部署期间是否可以通过某种方式修复它? 参考方案 您如何从WSDL生成客户端代码?如果您使用maven,则可以在插件设置中指定生成类的包(例如apache …

当依赖项位于buiild.sbt中时,获取java.lang.NoClassDefFoundError:javax / ws / rs / Path - java

我在build.sbt中有以下设置:lazy val proj = (project in file(".")) .settings( name := "Proj", resolvers += Resolver.mavenLocal, libraryDependencies += "javax.ws.rs&#…

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…