我有一些实体,其中包含一些日历属性。我想以将它们作为日期存储在 GSON 序列化 JSON 中的方式对其进行序列化,因为 Mongo 可以将 $date 存储为 new ISODate("..")。我们通常通过使用 ExclusionStrategy 忽略日历属性并手动设置它们来做到这一点,但一段时间后它变得非常可怕。
我发现了一些代码片段,可以通过自定义 TypeAdapter 使其工作。
这是我的 CalendarDateTypeAdapter。
public class CalendarDateTypeAdapter extends TypeAdapter<Calendar> implements JsonSerializer<Calendar>, JsonDeserializer<Calendar> {
private static final Gson gson = new GsonBuilder().create();
private static final TypeAdapter<Date> dateTypeAdapter = gson.getAdapter(Date.class);
private static final String MONGO_UTC_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
public JsonElement serialize(Calendar src, Type type,
JsonSerializationContext context) {
if (src == null) {
return null;
} else {
SimpleDateFormat format = new SimpleDateFormat(MONGO_UTC_FORMAT);
JsonObject jo = new JsonObject();
jo.addProperty("$date", format.format(src.getTime())); …
Run Code Online (Sandbox Code Playgroud)