2014-01-06 92 views
0

我在Java中使用Jackson和Jersey。 使用Web API我想通過也包含Joda DateTime對象的JSON文件發送POJO。 因爲這不是一個本地對象,我爲它構建了一個自定義序列化器和解串器。但是,因爲解串器似乎不起作用,所以我發送一個POST請求,但它在服務器上沒有收到。當然,當我從JSON移動日期字段時,它可以很好地工作。即使@JsonDeserializer註釋也不會調用自定義反序列化器

的JSON被髮送:

{"loc": [-0.1300836,51.5124623], 
"visibility":"Public", 
"date": "06 January 2014 09:51"} 

POST方法接收它:

@POST 
@Timed 
public String createTadu(@Valid Tadu tadu) throws JsonParseException, JsonMappingException, IOException { 
    Tadu createdTadu = new Tadu(tadu); 
    taduCollection.insert(createdTadu); 
    return String.format("{\"status\":\"success\", \"id\":\"%s\"}", tadu.getId()); 
} 

的POJO日期時間聲明:

private DateTime date; 
@JsonSerialize(using = CustomDateSerializer.class) 
public DateTime getDate() { 
    return date; 
} 
@JsonDeserialize(using = CustomDateDeserializer.class) 
public void setDate(DateTime date) { 
    this.date = date; 
} 

和自定義串行/解串:

public class CustomDateSerializer extends JsonSerializer<DateTime> { 

    private static DateTimeFormatter formatter = DateTimeFormat 
     .forPattern("dd MMMM yyyy HH:mm"); // 31 December 2013 16:22 

    @Override 
    public void serialize(DateTime value, JsonGenerator gen, 
     SerializerProvider arg2) throws IOException, 
     JsonProcessingException { 

     gen.writeString(formatter.print(value)); 
    } 
} 

public class CustomDateDeserializer extends JsonDeserializer<DateTime> 
{ 
    @Override 
    public DateTime deserialize(JsonParser jsonparser, 
     DeserializationContext deserializationcontext) throws IOException, JsonProcessingException { 

     DateTimeFormatter formatter = DateTimeFormat.forPattern("dd MMMM yyyy HH:mm"); 
     String date = jsonparser.getText(); 
     return formatter.parseDateTime(date); 

    } 
} 

很明顯,POST方法(createTadu)沒有被調用,因爲一個名爲「date」的字符串是通過JSON發送的,但它不是一個有效的Tadu對象,因爲它不是一個稱爲「date 」。我希望自定義反序列化器註釋能夠解決這個問題。 謝謝!

回答

0

我不明白爲什麼這種方法不起作用。我結束了下載jackson-datatype-joda模塊。

這個模塊唯一的問題是,它仍然不允許的日期時間自定義格式,並只與ISO 8601工作

的另一個問題是,在數據庫中的日期時間轉換爲一個劃時代UTC時間,最後增加了4個零(爲什麼是零)。因此,在將其提取回客戶端時,需要完成從時代到可預測日期的轉換。

相關問題