我使用的是Java 8和GSON的最新发布
版本(通过Maven)。如果序列化localdate
,将得到如下内容
"birthday": {
"year": 1997,
"month": 11,
"day": 25
}
我更喜欢“birthday”:“1997-11-25”
。Gson是否也支持更简洁的开箱即用格式,还是必须为localdate
s实现自定义序列化器?
(我尝试过gsonBuilder.setDateFormat(dateFormat.short)
,但似乎没有什么作用。)
我使用以下,支持读/写和空值:
class LocalDateAdapter extends TypeAdapter<LocalDate> {
@Override
public void write(final JsonWriter jsonWriter, final LocalDate localDate) throws IOException {
if (localDate == null) {
jsonWriter.nullValue();
} else {
jsonWriter.value(localDate.toString());
}
}
@Override
public LocalDate read(final JsonReader jsonReader) throws IOException {
if (jsonReader.peek() == JsonToken.NULL) {
jsonReader.nextNull();
return null;
} else {
return LocalDate.parse(jsonReader.nextString());
}
}
}
注册为@drux的人说:
return new GsonBuilder()
.registerTypeAdapter(LocalDate.class, new LocalDateAdapter())
.create();
编辑2019-04-04一个更简单的实现
private static final class LocalDateAdapter extends TypeAdapter<LocalDate> {
@Override
public void write( final JsonWriter jsonWriter, final LocalDate localDate ) throws IOException {
jsonWriter.value(localDate.toString());
}
@Override
public LocalDate read( final JsonReader jsonReader ) throws IOException {
return LocalDate.parse(jsonReader.nextString());
}
}
您可以通过注册NullSafe()
包装版本向其添加Null
支持:
new GsonBuilder()
.registerTypeAdapter(LocalDate.class, new LocalDateAdapter().nullSafe())
在进一步通知之前,我已经实现了一个自定义序列化程序,如下所示:
class LocalDateAdapter implements JsonSerializer<LocalDate> {
public JsonElement serialize(LocalDate date, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(date.format(DateTimeFormatter.ISO_LOCAL_DATE)); // "yyyy-mm-dd"
}
}
安装方法如下:
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.registerTypeAdapter(LocalDate.class, new LocalDateAdapter())
.create();
问题内容: 我正在使用Java 8和Gson的最新版本(通过Maven)。如果我序列化一个,我会得到这样的东西 我本来喜欢的地方。Gson是否还支持开箱即用的更简洁格式,还是我必须为s 实现自定义序列化程序? (我已经尝试过了,但这似乎没有什么不同。) 问题答案: 直到另行通知,我已经实现了一个自定义序列化器,如下所示: 它可以像这样安装:
问题内容: 我有一个格式。我希望它采用以下格式 以下是我尝试进行此转换的示例: 我得到的输出仍然不是格式。 请让我知道如何格式化从到 问题答案: 是自Unix纪元(1970年1月1日UTC:00:00)以来的毫秒数的容器。 它没有格式的概念。 输出…
问题内容: 好吧,我正在使用a进行详细说明,因为我从数据库中获取了一个对象,并且从同一对象中获得了一个变量“ fecha”(日期),因此我得到了a ,因此formatt以毫秒为单位,但是我不想出现毫秒。因此,我需要将我从数据库中收到的日期格式化为没有毫秒的新日期。 这是对象Factura: 在映射到数据库的xml中,我具有该变量“ fecha”的代码: 在数据库中,该列为。 当我从数据库中获取一个
我想将日期从07/02/2019转换为2019年7月07日。我的输入值是07/02/2019我想与目标值2019年7月07日进行比较.....请帮助我... public static void main(string[]args)引发ParseException{ 输出:Mon Jul 01 00:00:00 IST 2019这不是我的期望值
问题内容: 有人可以让我知道吗,如何在Java 中将日期格式转换为日期, 在输入和输出日期中都应为Strings。 我用过apache,但是在输出中没有毫秒数。 问题答案: 您还可以在Java 8中使用更新的Time API ,类似… 哪个输出… 这使您对管理时区负有更多责任,通常这可能是一个更好的解决方案 而且因为在Java 8 API中的时区之间进行转换使我很头疼(缺乏经验:P) 哪个输出…
我正在使用gson进行改造,将json反序列化为领域对象。这在大多数情况下都很有效。处理问题时会出现麻烦 RealmList(字符串(或任何其他基本数据类型)) 由于Realm不支持RealmList,其中E不扩展Realm对象,所以我将字符串包装在RealmObject中。 我的领域对象如下 SimpleRealmObj工作正常,因为它只有字符串元素 如何反序列化stringStuff?我试过使