2013-10-03 108 views
0

我正在使用RestTemplate和Jackson框架作爲我的Web服務層。 我的數據映射是基於註釋的。Spring RestTemplate&Jackson - 日期轉換?

public class User { 

    private String name; 
    private Date dateOfBirth; 

    @JsonProperty("Name") 
    public void setName(String name) { 
     this.name = name; 
    } 

    // Value coming back from MVC.Net "/Date(1381302000000)/" 
    @JsonProperty("DatOfBirth") 
    public void setDateOfBirth(Date dateOfBirth) { 
     this.dateOfBirth = dateOfBirth; 
    } 
} 

我該如何做這個日期轉換? 我寧願有一種方法來編寫邏輯一次,並適用於所有日期屬性,因爲這一直是我的日期格式。

我無法更改從Web服務返回的日期格式,它已被我的iPhone客戶端使用。

+1

您將需要一個自定義的'JsonDeserializer',抓住了'String'的毫秒部分並將其解析爲'Long'創建一個Date對象。 –

回答

1

這裏是我的解串器

public class DateDeserializer extends JsonDeserializer<Date> 
{ 
    @Override 
    public Date deserialize(JsonParser jsonParser, DeserializationContext arg1) throws IOException, JsonProcessingException { 
     ObjectCodec oc = jsonParser.getCodec(); 
     JsonNode node = oc.readTree(jsonParser); 
     String msDateString = node.getValueAsText(); 

     if (msDateString == null || msDateString.length() == 0) 
      return null; 

     String unicodeDateString = msDateString.substring(msDateString.indexOf("(")+1); 
     unicodeDateString = unicodeDateString.substring(0, unicodeDateString.indexOf(")")); 
     Date date = new Date(Long.valueOf(unicodeDateString) * 1000); 
     return date; 
    } 
} 

下面是使用

@JsonDeserialize(using = DateDeserializer.class) 
@JsonProperty("DatOfBirth") 
public void setDateOfBirth(Date dateOfBirth) { 
    this.dateOfBirth = dateOfBirth; 
}