I\'m using RestTemplete to get json data from a rest api and I\'m using Gson to parse data from json format to Object
Gson gson = new Gson();
restTemplate =
What I've done finally is going to my API project and create a CustomSerializer
public class CustomDateSerializer extends JsonSerializer<Date> {
@Override
public void serialize(Date t, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = formatter.format(t);
jg.writeString(formattedDate);
}
}
that return the format yyyy-MM-dd and I annotated date fields with
@JsonSerialize(using = CustomDateSerializer.class)
in my Android application I created Gson object as
Reader reader = new InputStreamReader(content);
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setDateFormat("yyyy-MM-dd");
Gson gson = gsonBuilder.create();
appels = Arrays.asList(gson.fromJson(reader, Appel[].class));
content.close();
and it works for now .. thanks for your help I appreciate it
Custom Serializers are no longer necessary - simply use GsonBuilder, and specify the date format, as such:
Timestamp t = new Timestamp(System.currentTimeMillis());
String json = new GsonBuilder()
.setDateFormat("yyyy-MM-dd hh:mm:ss.S")
.create()
.toJson(t);
System.out.println(json);
The 1382828400000
value is a long (time in milliseconds). You are telling GSON
that the field is a Date
, and it cannot automatically convert a long
into a Date
.
You have to specify your fields as long values
private long dateParution;
private long heureParution;
private long dateLimite;
private long heureLimite;
and after GSON
casts the JSON string to the desired Appel
class instance, construct another object with those fields as Dates and convert them while assigning the values to the new object.
Another alternative is to implement your own Custom Deserializer:
public class CustomDateDeserializer extends DateDeserializer {
@Override
public Date deserialize(JsonParser jsonParser, DeserializationContext context) throws IOException, JsonProcessingException {
// get the value from the JSON
long timeInMilliseconds = Long.parseLong(jsonParser.getText());
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(timeInMilliseconds);
return calendar.getTime();
}
}
You have to set this custom deserializer on your desired fields, on the setter methods, like:
@JsonDeserialize(using=CustomDateDeserializer.class)
public void setDateParution(Date dateParution) {
this.dateParution = dateParution;
}