J'ai compris que mes problèmes avec le système GSON tenaient au fait que, bien que mon type de retour ne soit pas un objet paramétré, il aurait dû l'être. Maintenant, j'ai besoin d'utiliser la méthode Gson.fromJson avec le type de paramètre pour spécifier le type de retour afin que GSON s'en charge pour moi.Créer un type paramétré de type "Classe"
J'ai créé une classe générique appelé RestResponse tel:
public class RestResponse<T> {
private String errorMessage;
private int errorReason;
private T result;
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "RestResponse [errorMessage=" + errorMessage + ", result=" + result + "]";
}
/**
* Does this response contain an error?
* @return true if in error
*/
public boolean isInError(){
return getErrorMessage()!=null;
}
/**
* @return the errorMessage
*/
public String getErrorMessage() {
return errorMessage;
}
/**
* @param errorMessage the errorMessage to set
*/
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
/**
* The error reason code
* @return the errorReason
*/
public int getErrorReason() {
return errorReason;
}
/**
* The error reason code
* @param errorReason the errorReason to set
*/
public void setErrorReason(int errorReason) {
this.errorReason = errorReason;
}
/**
* The result of the method call
* @return the result or null if nothing was returned
*/
public final T getResult() {
return result;
}
/**
* The result of the method call
* @param result the result to set or null if nothing was returned
*/
public final void setResult(T result) {
this.result = result;
}
}
Maintenant, je veux créer le type résultant de l'autre côté. J'ai une méthode générique que j'utilise pour décoder ces choses et soit jeter l'exception ou retourner le résultat.
donc ma méthode est comme ceci:
public Object submitUrl(String url, Class<?> clazz) throws AjApiException {
Où clazz est le type qui sera spécifié sur RestResponse.
Je vais ensuite créer le RestResponse avant de passer à GSON:
Type typeOfT = new TypeToken<RestResponse<clazz>>(){}.getType(); //1-->What goes here?
RestResponse<clazz> restResponse; //2-->and here?
Et il des erreurs. Quelqu'un peut-il me dire ce qui se passe dans ces endroits à la place de clazz?
Pourriez-vous fournir plus d'informations sur la façon dont vous l'avez implémenté? Merci! –
@BenoitDuffez J'ai ajouté du code qui, je pense, va aider. Ça fait un moment, donc je ne suis pas sûr de sa syntaxe. S'il vous plaît upvote si utile. – Thom
OK merci beaucoup. Ce n'est pas la solution que je voulais, mais ça peut être utile à quelqu'un.En outre, le '' est inutile ici à cause de l'effacement de type. La seule façon dont j'ai trouvé comment décrire les génériques à Gson était à travers 'ParameterizedType'. Voir http://stackoverflow.com/a/14139700/334493 –