2017-06-07 1 views
0

J'essaie d'appeler un service web json (dans Liferay), en particulier une méthode pour télécharger un fichier (add-file-entry), dans le params de la requête il y a un objet ServiceContext (https://docs.liferay.com/portal/6.2/javadocs/src-html/com/liferay/portal/service/ServiceContext.html#line.69), j'envoie cet objet param comme une chaîne JSON, et le service web json doit désérialiser la chaîne json dans un objet ServiceContext. ServiceContext a un attribut:Impossible d'invoquer le constructeur no-args pour l'interface java.io.Serializable

private Map<String, Serializable> _attributes;

quand je mets cette carte une entrée par exemple:

servicecontext.setAttribute("fileEntryTypeId", 0);

quand GSON tente de deserialiaze l'objet ServiceContext:

ServiceContext servicecontext = new Gson().fromJson(ServiceContext, ServiceContext.class); 

il lance l'exception: Impossible d'appeler le constructeur no-args pour l'interface java.io.Serializable.

S'il vous plaît Aide

Répondre

0

Le problème est que la classe Serializable ne pré-construit pas sans aucun paramètre, donc il ne devrait pas être possible de l'utiliser pour carte

private Map<String, Serializable> _attributes; //no 

Si vous voulez, vous pouvez essayer cette astuce, il devrait fonctionner, mais laissez-moi savoir

public class Myclass implements java.io.Serializable { 
    public Myclass(){} 
} 

après

private Map<String, Myclass > _attributes; 

Je ne suis pas sûr que cela fonctionne pour votre but, essayez-le et laissez-moi savoir

+0

Merci pour votre réponse rapide, mais le problème est que je ne peux pas changer la classe ServiceContext, il est défini dans les pots de Liferay que j'utilise. –

+0

Vous n'avez pas besoin de le faire, car en implémentant la classe Serializable vous pouvez le mettre à la place de Serializable –

+0

bien la carte "private Map _attributes;" est un attribut de la classe ServiceContext, donc je pense que si je veux faire votre solution je vais devoir changer la classe ServiceContext, vous ne pensez pas? –