我在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 」。我希望自定義反序列化器註釋能夠解決這個問題。 謝謝!