Java 为什么Response.getEntity()为空?
环境(JBossAS7,Wildfly 8) 在此之前,我能够深入研究一个使用jax-rs的项目,其中一个jax-rs资源的任务是通过网关连接另一个jax-rs资源。 在实现时,我找到了Response.newFrom(),它听起来非常适合网关组件执行的那种任务。 java文档还声明它可以用于这种用例 请注意,如果实体由未使用的输入流支持,则复制对该流的引用 但实际上第一次测试是红色的。因此,进一步挖掘,我发现了以下实现Java 为什么Response.getEntity()为空?,java,jakarta-ee,resources,jax-rs,Java,Jakarta Ee,Resources,Jax Rs,环境(JBossAS7,Wildfly 8) 在此之前,我能够深入研究一个使用jax-rs的项目,其中一个jax-rs资源的任务是通过网关连接另一个jax-rs资源。 在实现时,我找到了Response.newFrom(),它听起来非常适合网关组件执行的那种任务。 java文档还声明它可以用于这种用例 请注意,如果实体由未使用的输入流支持,则复制对该流的引用 但实际上第一次测试是红色的。因此,进一步挖掘,我发现了以下实现 public static ResponseBuilder fromRes
public static ResponseBuilder fromResponse(Response response) {
ResponseBuilder b = status(response.getStatus());
if (response.hasEntity()) {
b.entity(response.getEntity());
}
for (String headerName : response.getHeaders().keySet()) {
List<Object> headerValues = response.getHeaders().get(headerName);
for (Object headerValue : headerValues) {
b.header(headerName, headerValue);
}
}
return b;
}
我不太喜欢完全读取流,所以如果有人知道为什么getEntity()返回null。。。请随意部分
b.entity(response.getEntity())
应该负责响应流的复制。该死的你是对的,getter的javadoc说如果有未使用的输入流,它应该返回一个,但是wildfly 8.1.0.Final返回null。。甚至jboss as 7在调用getEntity()时也返回null
@maressPartb.entity(response.getEntity())
应该负责响应流的复制。该死的你是对的,getter的javadoc说它应该返回一个未使用的输入流(如果有),但是wildfly 8.1.0.Final返回null。甚至jboss as 7在调用getEntity()时也返回null
@maress
private <R> Response asNewResponse(Response response, GenericType<EntityType> sourceType, Function<EntityType, R> transformer ) {
boolean backed = response.bufferEntity();
if (backed) {
if (response.getStatus() == Response.Status.OK.getStatusCode()) {
Addresses entity = response.readEntity(sourceType);
return Response.status(response.getStatus()).entity(transformer.apply(entity)).build();
} else
return Response.status(response.getStatus()).entity(response.readEntity(new GenericType<String>() {
})).build();
} else {
if (response.getEntity() instanceof EntityType) {
return Response.status(response.getStatus()).entity(transformer.apply((EntityType)response.getEntity())).build();
}
return Response.status(response.getStatus()).entity(response.getEntity()).build();
}
}