2014-01-06 90 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个零(为什么是零)。因此,在将其提取回客户端时,需要完成从时代到可预测日期的转换。

相关问题