我遇到的问题是,我有一些用户是Java,有些是浏览器。我的目标浏览器是IE7+ (json3 for IE7 )& Chrome。
对于浏览器,我希望将日期反序列化为Date JavaScript对象(使用JSON.parse()方法)。对于java.util.Date使用者,我希望反序列化为一个Java对象。
因为我不能在浏览器端改变任何东西。我必须将消息序列化如下:
{ myDate: new Date(<EPOCH HERE>) }
这当然会给Java反序列化程序带来问题。然而,我希望我能用Gson做点什么来创造work...amy的想法吗?
还是我应该采取完全不同的策略?
发布于 2014-06-25 10:28:17
我通常使用注释@JsonSerialize和@JsonDeserialize来处理这个问题。我还使用ISO8601格式作为REST日期的标准。
@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);
}
}
}https://stackoverflow.com/questions/24405975
复制相似问题