giovedì 30 gennaio 2014

Passare oggetto Date con Gson

Questo post è utile per chi come me ha la necessità di effettuare una chiamata da Android a una servlet e si aspetta in output un oggetto Date e non una stringa, come di default accade con la classe Gson.


Per effettuare ciò, bisogna inserire le seguenti righe di codice nella servlet:
 
 
JsonSerializer<Date> ser = new JsonSerializer<Date>() {
  @Override
  public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext 
             context) {
    return src == null ? null : new JsonPrimitive(src.getTime());
  }
};



Gson gson = new GsonBuilder()
   .registerTypeAdapter(Date.class, ser).create();
 
 PrintWriter out = response.getWriter();

        out.println(gson.toJson(response));
 
 
E le seguenti righe di codice nel Thread android, 
dove viene richiamata la servlet: 
 
JsonDeserializer<Date> deser = new JsonDeserializer<Date>() {
  @Override
  public Date deserialize(JsonElement json, Type typeOfT,
       JsonDeserializationContext context) throws JsonParseException {
    return json == null ? null : new Date(json.getAsLong());
  }
}; 
Gson gson = new GsonBuilder()
   .registerTypeAdapter(Date.class, deser).create(); 

Oggetto ogg = gson.fromJson(responseServlet, Oggetto.class);

Troveremo così nell'ogg valorizzati gli attributi di tipo Date 
e non avremo quindi problemi di ClassCastException.
 
 

Nessun commento:

Posta un commento