我遇到的问题是我有一些消费者是Java,有些是浏览器。我的目标浏览器是IE7 +(仅适用于IE7的json3)&铬。
对于浏览器,我希望将日期反序列化为Date
JavaScript对象(使用JSON.parse()
方法。对于Java消费者,我希望反序列化为java.util.Date
Java对象。
鉴于我无法在浏览器端进行任何更改。我必须将消息序列化为以下内容:
{ myDate: new Date(<EPOCH HERE>) }
这当然会导致Java解串器出现问题。但是,我希望我可以用Gson
来完成这项工作......我的想法是什么?
或者我应该采取不同的策略?
答案 0 :(得分:2)
我通常使用注释@JsonSerialize
和@JsonDeserialize
来解决此问题。我还使用ISO8601格式作为REST API日期的标准。
@JsonSerialize(using=JsonDateSerializer.class)
@JsonDeserialize(using=JsonDateDeserializer.class)
private Date expiryDate;
JsonDateSerializer 类
@Component
public class JsonDateSerializer extends JsonSerializer<Date>
{
// ISO 8601
private static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
@Override
public void serialize(Date date, JsonGenerator gen, SerializerProvider provider)
throws IOException, JsonProcessingException
{
String formattedDate = dateFormat.format(date);
gen.writeString(formattedDate);
}
}
JsonDateDeserializer 类
@Component
public class JsonDateDeserializer extends JsonDeserializer<Date>
{
// ISO 8601
private static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
@Override
public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
throws IOException, JsonProcessingException
{
try
{
return dateFormat.parse(jsonParser.getText());
}
catch (ParseException e)
{
throw new JsonParseException("Could not parse date", jsonParser.getCurrentLocation(), e);
}
}
}