我有一个问题,试图将一个gson本地日期。我有下面的2适配器:
public class LocalDateSerializer implements JsonSerializer < LocalDate > {
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d-MMM-yyyy");
@Override
public JsonElement serialize(LocalDate localDate, Type srcType, JsonSerializationContext context) {
return new JsonPrimitive(formatter.format(localDate));
}
}
字符串
和
public class LocalDateDeserializer implements JsonDeserializer < LocalDate > {
@Override
public LocalDate deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
return LocalDate.parse(json.getAsString(),
DateTimeFormatter.ofPattern("d-MMM-yyyy").withLocale(Locale.ENGLISH));
}
}
型
我尝试做一个简单的对象“任务”的序列化,它有一个LocalDate类型的字段starttime。
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(LocalDate.class, new LocalDateSerializer());
gsonBuilder.registerTypeAdapter(LocalDate.class, new LocalDateDeserializer());
Gson gson = gsonBuilder.setPrettyPrinting().create();
LocalDate now=LocalDate.now();
Task task=new Task();
task.setID(1);
task.setDuration(2);
task.setID_Proiect(1);
task.setStarttime(now);
JSONObject json=new JSONObject(task);
String aux1=gson.toJson(json);
System.out.println(aux1);
Task t2=gson.fromJson(aux1,Task.class);
型
我收到错误
无法使字段“java.time.LocalDateTime#date”可访问;请更改其可见性或为其声明类型编写自定义TypeAdapter
你能告诉我这段代码有什么问题吗?我知道这可能是一个愚蠢的问题,但我真的需要帮助来提高我的技能。
1条答案
按热度按时间edqdpe6u1#
在java升级11到17期间,我在使用gson实现java.time.Instant时遇到了同样的问题,请参阅gson文档,了解为什么会发生这种情况:https://github.com/google/gson/blob/main/UserGuide.md#gsons-expose
**解决方案:**使用-
new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create()
创建Gson