2016-07-22 41 views
3

我想序列化一個包含日期列表的對象,我想序列化爲特定格式(yyyy-MM-dd)的JSON日期列表(字符串)。與傑克遜序列化日期列表

private List<Date> executionDates; 

會變得像:

"executionDates": [ 
    "2016-07-22", 
    "2016-07-23", 
    "2016-07-24" 
] 

這是可能的註釋做呢?

在此先感謝。

+0

你是什麼意思與註釋?你的意思是?另外,你不能序列化一個列表,爲了序列化一個列表,你需要把數據放到一個哈希集合中,因爲哈希集是可序列化的。 – Shaydoth

+0

就像'@JsonSerialize(using = JsonDateSerializer.class)'這樣的'executionDates'變量的getter。 – lealoureiro

回答

5

我找到了解決辦法。我不得不使用屬性contentUsing,而不是using在註釋是這樣的:

@JsonSerialize(contentUsing = JsonDateSerializer.class) 

contentUsing屬性用於收藏。從類文件:

串行器類使用用於序列化內容註釋屬性的(一個 收集/陣列的元件,地圖的值)。只能在屬性(方法,字段,構造函數)上使用 ,並且不能爲類本身賦值(因爲它們通常是泛型的)。

+0

對於所有人來說,請注意:請考慮私有字段名稱和getter/setter方法之間的一致性:例如,如果您將註釋放在專用字段上,但其公用getter方法的名稱不同,則最終結果將不會使用註記功能 – Chris

0

嘗試這樣:

對於串行化:

@Component 
public class JsonDateSerializer extends JsonSerializer<Date> 
{ 
    // ISO 8601 
    private static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 

    @Override 
    public void serialize(Date date, JsonGenerator gen, SerializerProvider provider) 
      throws IOException, JsonProcessingException 
    { 
     String formattedDate = dateFormat.format(date); 
     gen.writeString(formattedDate); 
    } 
} 
+0

我已經嘗試過,但我得到這個異常:'com.fasterxml.jackson.databind.JsonMappingException:java.util.Arrays $ ArrayList不能轉換爲java.util.Date'。不是應用於List中的每個元素,而是應用於整個集合。 – lealoureiro

+0

你有沒有在你的代碼中的某個地方? '@JsonSerialize(using = JsonDateSerializer.class)'編輯:你有沒有嘗試將日期設置爲變量類型Date,而不是將數據放入數組列表中? – Shaydoth

+0

是的,我有這樣的:'@JsonSerialize(使用= JsonDateSerializer.class) \t公衆最終名單 getExecutionDates(){ \t \t回報executionDates; ''。使用可變類型日期而不是日期列表,但是我想要一個日期列表,而不僅僅是一個日期... – lealoureiro