
Enquanto desenvolvia um webservice que usava Gson para transformar objetos em Json como formato de às requisições de um aplicativo Android, tive a necessidade de modificar o formato em que ficará objetos da classe java.util.Date após a serialização no webservice e de modificar o formato esperado na deserialização no cliente. Modifiquei os formatos para “yyyy-MM-dd’T’HH:mm:ss” da seguinte forma:
Criei um classe que herde de JsonSerializer no webservice e uma classe que herde de JsonDeserializer no app Android.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class DateDeserializer implements JsonDeserializer { | |
@Override | |
public Date deserialize(JsonElement element, Type arg1, JsonDeserializationContext arg2) throws JsonParseException { | |
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); | |
try { | |
return formatter.parse(element.getAsString()); | |
} catch (ParseException e) { | |
return null; | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class DateSerializer implements JsonSerializer { | |
@Override | |
public JsonElement serialize(Date date, Type typeOfSrc, JsonSerializationContext context) { | |
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); | |
return context.serialize(formatter.format(date)); | |
} | |
} |
Por fim, em ambos os lados, ao invés de criar uma instância da classe com.google.gson.Gson na forma direta, através de construtor (new Gson()), eu fiz uso do com.google.gson.GsonBuilder , por onde eu informei o JsonDeserializer e o JsonSerializer, dependendo do lado do sistema, como configuração antes do build.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Gson gson = gsonBuilder.registerTypeAdapter(Date.class, new DateSerializer()).create(); | |
Gson gson = gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer()).create(); |