gson fails to parse using GsonBuilder.setDateFormat(“yyyy-MM-dd'T'HH:mm:ss.SSSZ”)

前端 未结 1 495
梦如初夏
梦如初夏 2020-12-18 00:44

I get this string from the server:

[
 {
  \"title\":\"spoil the ones u love today\",
  \"startDateTime\":\"2014-08-10T20:10:36.7158Z\"
 },
 {
  \"title\":\"h         


        
相关标签:
1条回答
  • 2020-12-18 01:18

    Only setting the required DateFormat is not sufficient.

    You need to define an implementation of com.google.gson.JsonDeserializer. For ex.

    import java.lang.reflect.Type;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.TimeZone;
    import com.google.gson.JsonDeserializationContext;
    import com.google.gson.JsonDeserializer;
    import com.google.gson.JsonElement;
    import com.google.gson.JsonParseException;
    
    public class DateDeserializer implements JsonDeserializer<Date> {
    
      @Override
      public Date deserialize(JsonElement element, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
          String date = element.getAsString();
    
          SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
          format.setTimeZone(TimeZone.getTimeZone("GMT"));
    
          try {
              return format.parse(date);
          } catch (ParseException exp) {
              System.err.println("Failed to parse Date:", exp);
              return null;
          }
       }
    }
    

    and then register the above deserializer:

    GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer());
    
    0 讨论(0)
提交回复
热议问题