2010-12-01 26 views
5

Yay yapılandırmalı REST sunucumuzda, bir nesneyi Json'a dönüştürmek için Jackson kullanıyoruz. Bu nesne birkaç java.util.Date nesnesi içerir.Jackson ile Gson arasında bir tarih nasıl dönüştürülür?

biz ": Ayrıştırılamayan tarih java.text.ParseException" olsun GSON en fromJson yöntemini kullanarak bir Android cihazda bu serisini istediğinizde. Tarihi 1970'den beri milisaniye karşılık gelen bir zaman damgasına serileştirmeyi denedik, ancak aynı istisnayı elde ettik.

GSON bir java.util.Date nesnesine 1291158000000 gibi bir zaman damgası biçimlendirilmiş tarihi ayrıştırmak için konfigüre edilebilir ?

cevap

6

Sen Tarihlerde için kendi deserializer kaydetmeniz gerekir.

Ben "23-11-2010 10:00:00" Bir Tarih nesnesine serisi kaldırılan olan JSON dizesi aşağıda küçük bir örnek oluşturduk: Jackson ile ilgili olarak

import java.lang.reflect.Type; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

import com.google.gson.Gson; 
import com.google.gson.GsonBuilder; 
import com.google.gson.JsonDeserializationContext; 
import com.google.gson.JsonDeserializer; 
import com.google.gson.JsonElement; 
import com.google.gson.JsonParseException; 


public class Dummy { 
    private Date date; 

    /** 
    * @param date the date to set 
    */ 
    public void setDate(Date date) { 
     this.date = date; 
    } 

    /** 
    * @return the date 
    */ 
    public Date getDate() { 
     return date; 
    } 

    public static void main(String[] args) { 
     GsonBuilder builder = new GsonBuilder(); 
     builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() { 

      @Override 
      public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) 
        throws JsonParseException { 

       SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); 
       String date = json.getAsJsonPrimitive().getAsString(); 
       try { 
        return format.parse(date); 
       } catch (ParseException e) { 
        throw new RuntimeException(e); 
       } 
      } 
     }); 
     Gson gson = builder.create(); 
     String s = "{\"date\":\"23-11-2010 10:00:00\"}"; 
     Dummy d = gson.fromJson(s, Dummy.class); 
     System.out.println(d.getDate()); 
    } 
} 
+1

Bu gerçekten soruya cevap vermez, değil mi? Soru açıkça "zaman damgası biçimlendirilmiş tarihleri" – Nilzor

1

, seni yalnızca sayısal (zaman damgası) ve metin seri (SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS) arasında seçim, aynı zamanda metinsel varyantı (SerializationConfig.setDateFormat) için kullanılacak tam DateFormat tanımlayamaz. Bu nedenle, Gson'un ISO-8601 formatını desteklemiyorsa, Jackson'ın kullanacağı varsayılan bir özelliği kullanmaya zorlayabilmeniz gerekir. Ayrıca

: Eğer GSON üzerinde kullanmaktan sakıncası yoksa Jackson, Android'de çalışıyor.