为什么Response.getEntity()为null?

时间:2016-10-14 05:24:20

标签: java java-ee resources jax-rs

Env(Jboss AS 7,Wildfly 8)

之前我能够使用jax-rs潜入项目。其中jax-rs资源有任务来连接另一个jax-rs资源。 在实现时,我发现了Response.newFrom(),对于网关组件所具有的那种任务来说,这听起来很棒。 此外,java doc声明它可以用于那种用例 “请注意,如果实体由未使用的输入流支持,则会复制对流的引用。”

但实际上第一次测试变红了。所以深入挖掘,我找到了以下实现

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()返回空!

对于遇到同样问题的每个人,我最终都这样做了。

    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();
    }
}

我对完全阅读流并不高兴,所以如果有人知道为什么getEntity()会返回null ...随意

0 个答案:

没有答案