Maillot ClientResponse.getEntity de type générique
J'ai un problème pour désérialiser l'aide de jeresy ClientRespone.getEntity
J'ai essayé de suivre des tutoriels et des questions, d'inclure ce:
http://jersey.576304.n2.nabble.com/How-can-I-parse-a-java-util-List-lt-gt-Is-it-supported-by-the-Jersey-client-td2300852.html
https://jersey.java.net/nonav/documentation/1.5/json.html
http://www.programcreek.com/java-api-examples/index.php?api=com.sun.jersey.api.client.GenericType
et j'ai toujours le même exception, encore et encore..
Mon objectif est:
au lieu de:
response.getEntity(String.class); --> {"name":"Ben","type":"The man","id":0}
et ensuite l'analyser (à l'aide de Jackson par exemple), je veux obtenir l'entité dans mon POJO objet.
c'est mon tryings jusqu'à présent:
ServerSide:
@POST
@Path("/account") //route to a specific method.re
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response saveDataIntoHash(Account account) {
Account createdAccount = new Account(account.getName(), account.getType());
accountHash.put(createdAccount.getID(), createdAccount);
return Response.status(201).entity(new AccountResponse(createdAccount.getID())).build();
}
Côté serveur Compte de la Classe:
private String name;
private String type;
private int ID;
private static int classID = 0;
public Account(String name, String type) {
this.name = name;
this.type = type;
this.ID = classID++;
}
public Account() {
}
public void setName(String name) { this.name = name; }
public String getName() { return name; }
public void setType(String type) { this.type = type; }
public String getType() { return type; }
public int getID() {
return ID;
}
public void setID(int ID) {
this.ID = ID;
}
public static int getClassID() {
return classID;
}
public static void setClassID(int classID) {
Account.classID = classID;
}
Infoclient
private static void getToRestPartner(Client client) {
WebResource webResource = client.resource("http://localhost:8080/RESTfulExample/rest/account/0");
ClientResponse response = webResource.type("application/json").get(ClientResponse.class);
if (!(response.getStatus() == 201 || response.getStatus() == 200)) {
throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
}
System.out.println("Output from Server .... \n");
List<Account> accountList = response.getEntity(new GenericType<List<Account>>() {
});
System.out.println(accountList.size());
}
Compte Client de la classe:
@XmlRootElement
public class Account {
@XmlElement
private String name;
@XmlElement
private String type;
@XmlElement
private int id;
public Account(String name, String type, Integer id) {
this.name = name;
this.type = type;
this.id = id;
}
public Account() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
Il jette cette exception:
Dec 7, 2014 12:15:58 PM com.sun.jersey.api.client.ClientResponse getEntity
SEVERE: A message body reader for Java class java.util.List, and Java type java.util.List<Account>, and MIME media type application/json was not found
Dec 7, 2014 12:15:58 PM com.sun.jersey.api.client.ClientResponse getEntity
SEVERE: The registered message body readers compatible with the MIME media type are:
*/* ->
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.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
Exception in thread "main" com.sun.jersey.api.client.ClientHandlerException: A message body reader for Java class java.util.List, and Java type java.util.List<Account>, and MIME media type application/json was not found
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:549)
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:523)
at com.sample.Sample.getToRestPartner(Sample.java:59)
at com.sample.Sample.main(Sample.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Votre aide sera appréciée !!
OriginalL'auteur user2212726 | 2014-12-07
Vous devez vous connecter pour publier un commentaire.
Peu de choses ont besoin d'être fixé ou ajoutés (pas sûr que, dans votre cas, certaines parties sont manquantes)
Ressource: Fait mon propre test, que la vôtre manquait quelques éléments
Supposé que vous avez cette dépendance:
Cas de Test: Avis de la configuration du client. Cela est nécessaire.
Compte (client) classe est le manque d'une annotation. Il est nécessaire que vous êtes en utilisant des annotations de champ. Une autre option est d'ajouter un getter et setter pour la
id
Résultat de test:
Remarque: ce test est basé sur l'hypothèse que tout va bien de votre côté serveur.
OriginalL'auteur Paul Samsotha