L'extraction RESTE des ressources de Liste en tant que<T> avec Jersey
Je suis en train d'écrire une fonction générique en Jersey, qui peut être utilisé pour récupérer une Liste d'objets de même type par le REPOS. Je me suis basé sur les informations trouvées dans ce forum: lien
@Override
public <T> List<T> fetchResourceAsList(String url) {
ClientConfig cc = new DefaultClientConfig();
Client c = Client.create(cc);
if (userName!=null && password!=null) {
c.addFilter(new HTTPBasicAuthFilter(userName, password));
}
WebResource resource = c.resource(url);
return resource.get(new GenericType<List<T>>() {});
}
Cependant, ce n'est pas de travail. Si j'essaie de l'exécuter, j'obtiens l'erreur suivante: SEVERE: A message body reader for Java class java.util.List, and Java type java.util.List<T>, and MIME media type application/xml was not found
.
Cependant, si j'écris cette fonction sans création de modèles (en remplacement de T, avec un nom de classe) ça fonctionne très bien. Bien sûr, cette façon la fonction perd de sa signification.
Est-il un moyen de résoudre ce problème?
- Voir lien ci-dessous stackoverflow.com/questions/1603404/...
- ce nouveau a des conseils pour le serveur que je vois. J'ai besoin de type générique de support pour le client.
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé la solution
https://java.net/projects/jersey/lists/users/archive/2011-08/message/37
Voir GenericType classe de jersey qui peuvent vous aider
Unmarshaller besoin de savoir quel type de l'objet avant de pouvoir unmarhall le contenu retourné . Comme les génériques de l'information n'est pas disponible au moment de l'exécution, de sorte que vous demandez n'est pas possible. Il ne peut pas unsmarhall quelque chose qu'il ne sait rien au sujet.
meilleur que vous pouvez faire est ;
ou avec les génériques mises en garde (je ne suis pas sûr si cela va fonctionner)
S'étendant sur user2323189, vous pouvez utiliser de la Collection au lieu de List.class de sorte que vous serez en mesure de sérialiser tous les types d'étendre la Collecte. J'ai créer un simple getter dans mon client de base de la classe et peut simplement utiliser ce à la restauration de tout type de Collection. Pas le clazz variable est fourni fourni dans mon constructeur de sorte qu'il n'est pas un argument fourni. Vous pourriez probablement transformer cela en une méthode statique et l'utilisation de la signature GenericType> avec un paramètre de Classe pour la rendre encore plus générique.