Search code examples
javajsonrestjax-rsjersey-2.0

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


I don't understand why when I receive a json encoded string this is not decoded automatically. I tried this code using Apache CFX 3.1.4 or 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 );
}

The request is successfully executed but basePath contains "\/opt\/local\/application\/rest\/" (backslash and double quotes included)

basePath should instead contain this: /opt/local/application/rest/

It seems to me, the json deserialization hasn't be triggered when it should.


Solution

  • The problem was the server response. A server should not return only a quoted string, even if correctly encoded, because a string is not a valid JSON object.