非法状态方法中的异常与响应参数

2022-09-02 19:25:03

我写了一个简单的类来测试响应读取实体方法(如果它像我预期的那样工作)。但它效果不佳。

当我启动我的类时,我在以下错误:response.readEntity()

Exception in thread "main" java.lang.IllegalStateException: Method not supported on an outbound message.  
  at org.glassfish.jersey.message.internal.OutboundJaxrsResponse.readEntity(OutboundJaxrsResponse.java:150)

这是我写的代码

public static void main(String[] args) {
        List<Entity> representations = new ArrayList<>();
        representations.add(new Entity("foo", "baz", false));
        representations.add(new Entity("foo1", "baz1", true));
        representations.add(new Entity("foo2", "baz2", false));
        Response build = Response.ok(representations).build();
        printEntitesFromResponse(build);
    }

public static void printEntitesFromResponse(Response response) {
        response
                .readEntity(new GenericType<List<Entity>>() {})
                .stream()
                .forEach(entity -> System.out.println(entity));
    }

我做错了什么?


答案 1

有两种类型的 s,入站和出站,尽管它们仍然使用相同的接口。出站是指从服务器端发送响应Response

Response response = Response.ok(entity).build();

入站是指您在客户端接收响应。

Response response = webTarget.request().get();

该方法在服务器端出站响应上被禁用,因为您不需要它。仅当需要从响应流序列化响应时,才使用它。但是当它是出站时,没有。readEntity()

如果希望实体出现在出站响应上,只需使用 Response#getEntity()


答案 2

您可以使用 Mockito 直接模拟响应。类似的东西

private final Response response = Mockito.mock(Response.class);

然后,您可以在调用 method 时模拟所需的响应。readEntity

Mockito.when(response.readEntity(String.class)).thenReturn("result");

推荐