Error when trying to convert JSON to POJO using Jersey
Solution 1
By default, the server seems to produces a content-type text/plain
. Careful, you're negotiating a JSON content-type but you don't pass it to the call:
WebResource resource = client.resource(url);
Builder builder = resource.accept(MediaType.APPLICATION_JSON);
GenericType<List<EMailInformations>> genericType =
new GenericType<List<EMailInformations>>() {};
List<EMailInformations> response = builder.get(genericType);
First, you define the path, then Jersey gives you a builder to add content-type negotiation, headers, query parameters, etc. If you call the resource directly, you lose those parameters.
Solution 2
I ran into the same problem. I could get somewhat further by using the tips from 'yves amsellem'. For me I could fix this using the POJO mapper feature. (They need to be enabled on server AND client side. Also the library jersey-json is necessary to get this to work)
ClientConfig config = new DefaultClientConfig();
..
config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
..
Client client = Client.create(config);
I hope this helps you further along, even though the question is old.
Comments
-
Marouane Gazanayi almost 2 years
I'm doing this :
WebResource resource = client.resource(urlStr); resource.accept(MediaType.APPLICATION_JSON_TYPE, MediaType.APPLICATION_XML_TYPE); GenericType<List<EMailInformations>> genericType = new GenericType<List<EMailInformations>>() {}; List<EMailInformations> response = null; try{ response = resource.get(genericType); } catch (UniformInterfaceException ue) { ClientResponse clientResponse = ue.getResponse(); }
Class EMailInformations
@XmlRootElement public class EMailInformations { private long id; public EMailInformations(){ } public EMailInformations(long id) { super(); this.id = id; } //getters & setters ... }
Some of the JSON response
{"cn":[{"id":"302","l":"7","d":1308239209000,"rev":14667,"fileAsStr":"TAICHIMARO, Marouane","_attrs":{"lastName":"TAICHIMARO","imAddress1":"other:......
I got this error :
21 juin 2011 16:56:01 com.sun.jersey.api.client.ClientResponse getEntity GRAVE: A message body reader for Java class java.util.List, and Java type java.util.List<fr.liberacces.pool.liferay.connecteur.modele.EMailInformations>, and MIME media type text/plain was not found 21 juin 2011 16:56:01 com.sun.jersey.api.client.ClientResponse getEntity GRAVE: The registered message body readers compatible with the MIME media type are: text/plain -> com.sun.jersey.core.impl.provider.entity.StringProvider com.sun.jersey.core.impl.provider.entity.ReaderProvider */* -> com.sun.jersey.core.impl.provider.entity.FormProvider com.sun.jersey.core.impl.provider.entity.StringProvider com.sun.jersey.core.impl.provider.entity.ByteArrayProvider com.sun.jersey.core.impl.provider.entity.FileProvider com.sun.jersey.core.impl.provider.entity.InputStreamProvider com.sun.jersey.core.impl.provider.entity.DataSourceProvider com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General com.sun.jersey.core.impl.provider.entity.ReaderProvider com.sun.jersey.core.impl.provider.entity.DocumentProvider com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General com.sun.jersey.json.impl.provider.entity.JSONArrayProvider$General com.sun.jersey.json.impl.provider.entity.JSONObjectProvider$General com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General com.sun.jersey.core.impl.provider.entity.EntityHolderReader com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General com.sun.jersey.json.impl.provider.entity.JacksonProviderProxy
But I got this error : GRAVE: A message body reader for Java class java.util.List, and Java type ... was not found
This is firebug trace :
Réponsevoir le code source Date Wed, 22 Jun 2011 10:36:19 GMT Content-Encoding gzip Content-Length 634 Via 1.1 zimbra.server.com Keep-Alive timeout=15, max=100 Connection Keep-Alive Content-Type text/plain Requêtevoir le code source Host zimbra.server.com User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding gzip, deflate Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive 115 Connection keep-alive Cookie ZM_AUTH_TOKEN=0_01e07d9cb12b86ef4675604362137c08c1d9fd0d_69643d33363a61343831353331382d336436362d343766632d386662393d3133613638633661323165393b6578703d31333a313330383832313935333436393b747970653d363a7a696d6172613b; JSESSIONID=1eb0ksxao39jj