2013-10-03 67 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; 
}