编写支持Xml和JSON媒体类型的Web服务。遵循ISO标准以支持日期格式yyyy-MM-dd'T'HH:mm:ss.SSSXXX
为了在xml中支持这种格式,我编写了一个DateAdapter
类来完成日期字段的编组和取消编组。
JSON格式有一个CustomSerialization和Deserialization类。它的实现几乎与Adapter类相似。但它会抛出异常。
@Override
public void serialize(Date aDate, JsonGenerator aJsonGenerator, SerializerProvider aSerializerProvider)
throws IOException, JsonProcessingException {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
String dateString = dateFormat.format(aDate);
aJsonGenerator.writeString(dateString);
}
例外:
Illegal pattern character 'X'
at java.text.SimpleDateFormat.compile(SimpleDateFormat.java:768)
使用jackson v2.2.1 工作适配器实现完全相同。
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
@Override
public String marshal(final Date v) throws Exception {
System.out.println(v);
return dateFormat.format(v);
}
@Override
public Date unmarshal(final String v) throws Exception {
System.out.println(v);
return dateFormat.parse(v);
}
答案 0 :(得分:2)
答案 1 :(得分:0)
您可以创建反序列化器并将其用作@Annotation
公共类TemporalDeserializerLocalDateTime扩展了JsonDeserializer {
@Override
public LocalDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationCtx)
throws IOException, JsonProcessingException {
ObjectCodec oc = jsonParser.getCodec();
String content = oc.readValue(jsonParser, String.class);
return LocalDateTime.parse(content);
}
}
公共类PaymentResource {
@JsonDeserialize(using = TemporalDeserializerLocalDateTime.class)
private LocalDateTime paymentDate;
}
答案 2 :(得分:-1)
Joop Eggen
的评论解决了这个问题。从SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
到SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
的简单日期格式解决了问题。