如何在 Jackson 和 Gson 之间转换日期?

2024-04-26

在我们的 Spring 配置的 REST 服务器中,我们使用 Jackson 将对象转换为 Json。该对象包含几个 java.util.Date 对象。

当我们尝试使用 Gson 的 fromJson 方法在 Android 设备上反序列化它时,我们得到一个“java.text.ParseException:无法解析的日期”。我们尝试将日期序列化为与 1970 年以来的毫秒相对应的时间戳,但得到了相同的异常。

是否可以将 Gson 配置为将时间戳格式的日期(例如 1291158000000)解析为 java.util.Date 对象?


您需要为日期注册自己的反序列化器。

我在下面创建了一个小示例,其中 JSON 字符串“23-11-2010 10:00:00”被反序列化为 Date 对象:

import java.lang.reflect.Type;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;


public class Dummy {
    private Date date;

    /**
     * @param date the date to set
     */
    public void setDate(Date date) {
        this.date = date;
    }

    /**
     * @return the date
     */
    public Date getDate() {
        return date;
    }

    public static void main(String[] args) {
        GsonBuilder builder = new GsonBuilder();
        builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {

            @Override
            public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
                    throws JsonParseException {

                SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
                String date = json.getAsJsonPrimitive().getAsString();
                try {
                    return format.parse(date);
                } catch (ParseException e) {
                    throw new RuntimeException(e);
                }
            }
        });
        Gson gson = builder.create();
        String s = "{\"date\":\"23-11-2010 10:00:00\"}";
        Dummy d = gson.fromJson(s, Dummy.class);
        System.out.println(d.getDate());
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Jackson 和 Gson 之间转换日期? 的相关文章

随机推荐