【问题标题】:JSON serialization strategy for dates日期的 JSON 序列化策略
【发布时间】:2014-08-15 20:34:40
【问题描述】:

我遇到的问题是我有一些 Java 消费者和一些浏览器。我的目标浏览器是 IE7+(json3 仅适用于 IE7)和 Chrome。

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

鉴于我无法在浏览器端进行任何更改。我必须将消息序列化为这样的:

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

这当然会导致 Java 反序列化器出现问题。不过,我希望我可以用 Gson 做点什么来完成这项工作……我的想法?

或者我应该采取完全不同的策略吗?

【问题讨论】:

    标签: java json serialization


    【解决方案1】:

    我通常使用注解@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);
            }
        }
    }
    

    【讨论】:

    • 所以你的浏览器代码中有一个单独的解析器?
    • @Cheetah 确实如此;)我不知道您在使用什么,但是如果您使用 JQuery 或 AngularJS,您就很简单了。
    猜你喜欢
    • 1970-01-01
    • 2018-11-15
    • 2013-05-17
    • 2021-05-26
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2012-01-10
    相关资源
    最近更新 更多