使用 Java REST 客户端(Apache CXF 或 Jersey)读取字符串

Reading a string with Java REST Client (Apache CXF or Jersey)

我不明白为什么当我收到 json 编码的字符串时,它没有自动解码。 我使用 Apache CFX 3.1.4 或 Jersey 2.22.1 尝试了这段代码:

Client client = ClientBuilder.newClient().register(JSONProvider.class);

WebTarget target = client.target("http://example.org/rest/service1");
target = target.queryParam("method", "method1");

Entity<EndpointRequest> entity = Entity.entity(new EndpointRequest("0000"),
                       MediaType.APPLICATION_JSON);
Response response = target.request()
                    .accept(MediaType.APPLICATION_JSON)
                    .post(entity);

System.out.println( response.getStatus() );

if (response.getStatus() == 200) {
// The problem comes here
    String basePath = response.readEntity(String.class);
    System.out.println( basePath );
}

请求执行成功但basePath包含"\/opt\/local\/application\/rest\/"(包括反斜杠和双引号)

basePath 应该包含这个:/opt/local/application/rest/

在我看来,json 反序列化没有在应该触发的时候触发。

您创建了一个 Client 和一个 WebTarget,但从未真正使用过它们。您最终改用实体和响应。我不确定您使用的是什么库,但我认为您需要实际使用 Ciient 和 WebTarget 来调用 JSONProvider。

问题是服务器响应。服务器不应该 return 只有带引号的字符串,即使编码正确,因为 a string is not a valid JSON object.