首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >日期的JSON序列化策略

日期的JSON序列化策略
EN

Stack Overflow用户
提问于 2014-06-25 10:17:27
回答 1查看 5.6K关注 0票数 3

我遇到的问题是,我有一些用户是Java,有些是浏览器。我的目标浏览器是IE7+ (json3 for IE7 )& Chrome。

对于浏览器,我希望将日期反序列化为Date JavaScript对象(使用JSON.parse()方法)。对于java.util.Date使用者,我希望反序列化为一个Java对象。

因为我不能在浏览器端改变任何东西。我必须将消息序列化如下:

{ myDate: new Date(<EPOCH HERE>) }

这当然会给Java反序列化程序带来问题。然而,我希望我能用Gson做点什么来创造work...amy的想法吗?

还是我应该采取完全不同的策略?

EN

回答 1

Stack Overflow用户

发布于 2014-06-25 10:28:17

我通常使用注释@JsonSerialize@JsonDeserialize来处理这个问题。我还使用ISO8601格式作为REST日期的标准。

代码语言:javascript
复制
@JsonSerialize(using=JsonDateSerializer.class)
@JsonDeserialize(using=JsonDateDeserializer.class)
private Date expiryDate;

JsonDateSerializer

代码语言:javascript
复制
@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

代码语言:javascript
复制
@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);
        }
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24405975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档