2016-10-26 7 views
0

問題がGson Postgresのタイムスタンプのシリアライズ

private static final GsonBuilder GSON_BASE = Converters 
     .registerAll(new GsonBuilder().disableHtmlEscaping()) 
     .registerTypeAdapter(InfoTransfer.class, new InfoTransfer.Adapter()) 
     .setDateFormat(DateFormat.FULL, DateFormat.FULL) //Line added but it seems work for MySQL DB Timestamp 
     .setPrettyPrinting() 
     .create(); 
. 
//inner class in InfoTransfer 
public static class Adapter implements JsonSerializer<InfoTransfer>{ 

    @Override 
    public JsonElement serialize(InfoTransfer src, Type typeOfSrc, JsonSerializationContext context) { 

     Gson gson= new Gson(); 
     JsonObject jsonObject= (JsonObject) gson.toJsonTree(src); 

     return new JsonPrimitive(jsonObject.getAsString()); 
    } 
} 
. 
. 
. 
Log.d("Result",GSON_BASE.toJson(data)); 

期待される結果、GSONを使用してPostegresタイムスタンプのシリアル化である:

"created_at": "2016-10-13 18:18:51.64208+01" 

結果:

\"created_at\": \"\\u0000\\u0001\\ufffdM\\u0015q\\ufffd}\" 

ので、どんな提案?

答えて

1

次のように日付の書式を設定することができる: -

setDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSSX") 

例: -

public static void main(String[] args) { 

     String jsonString = "{\"customorId\":\"506\",\"joiningDate\":\"2016-10-26 19:49:17.290671+01\"}"; 

     Gson gson = new GsonBuilder() 
       .setDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSSX") 
       .setPrettyPrinting() 
       .create(); 


     //Deserialize 
     Customer customer = gson.fromJson(jsonString, Customer.class); 
     System.out.println(customer.toString()); 

     //Serialize 
     Customer customerSerialize = new Customer(); 
     customerSerialize.setCustomorId("123"); 
     customerSerialize.setJoiningDate(new Date()); 

     System.out.println(gson.toJson(customerSerialize)); 


    } 

Customerクラス: -

public class Customer implements Serializable { 
    private static final long serialVersionUID = 1100012615187080642L; 

    private String customorId; 

    private Date joiningDate; 

} 

サンプル出力: -

Customer [customorId=506, joiningDate=Wed Oct 26 19:54:07 BST 2016] 
{ 
    "customorId": "123", 
    "joiningDate": "2016-10-26 20:23:37.000811+01" 
} 
+0

仲間:)ありがとう、このソリューションを使用すると、文字列形式^^で日付を得た場合に動作しますが、私の場合には、我々はPostgresのタイムスタンプをシリアル化したかったので、我々はそれを送信するためにWebサービスを更新するために使用文字列形式です。私は解決策を投稿します、あなたのようなものです – Gofurs

+0

この解決策は、OPの期待される結果に基づいています。また、私はpostgresでNOW()と検証しました(now()はCURRENT_TIMESTAMPに相当する伝統的なPostgreSQLです) – notionquest

関連する問題