java - 如何将 LocalDateTime 保存到 json 文件然后检索它
问题描述
所以我正在为我的顶点项目开发一个可移植的应用程序,但我已经走到了死胡同。我的项目是一个提醒应用程序,它应该在输入的日期和时间向用户推送消息。
到目前为止,我已经能够保存到 json,但我在重新获取信息时遇到了问题。所以我的问题是,当 LocalDateTime 进入 Json 文件时如何格式化它,以便我可以再次将其取回?
这是我尝试从刚刚写的 json 中获取时遇到的异常。
2 Exception Occured while converting Json into Java --> Cannot construct instance of `java.time.LocalDateTime` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
at [Source: (String)"{"eventName":"Test","repeatEvent":false,"repeatValue":0,"repeatType":"Min","message":"Test". {"nano":0,"year":2020,"monthValue":12,"dayOfMonth":25,"hour":21,"minute":30,"second":0,"dayOfWeek":"FRIDAY","dayOfYear":360,"month":"DECEMBER","chronology":{"id":"ISO","calendarType":"iso8601"}}}"; line: 1, column: 129] (through reference chain: bean.Event["reminderDateTime"])
这是我的 Util 类,以防它有用。我尝试了@JsonFormat,但它似乎不起作用。
package util;
import java.io.IOException;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonUtil {
private static ObjectMapper mapper = new ObjectMapper();
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
public static String convertJavaToJson(Object object)
{
String jsonResult = "";
try {
jsonResult = mapper.writeValueAsString(object);
}
catch (JsonGenerationException e) {
System.out.println("1 Exception Occured while converting Java Object into Json -->" + e.getMessage());
}
catch (JsonMappingException e) {
System.out.println("2 Exception Occured while converting Java Object into Json -->" + e.getMessage());
}
catch (IOException e) {
System.out.println("3 Exception Occured while converting Java Object into Json -->" + e.getMessage());
}
catch (Exception e) {
System.out.println("4 Exception Occured while converting Java Object into Json -->" + e.getMessage());
}
return jsonResult;
}
public static <T> T convertJsonToJava(String jsonString, Class<T> cls) {
T result = null;
try {
result = mapper.readValue(jsonString, cls);
}
catch (JsonParseException e){
System.out.println("1 Exception Occured while converting Json into Java --> " + e.getMessage());
}
catch (JsonMappingException e) {
System.out.println("2 Exception Occured while converting Json into Java --> " + e.getMessage());
}
catch (IOException e) {
System.out.println("3 Exception Occured while converting Json into Java --> " + e.getMessage());
}
catch (Exception e) {
System.out.println("4 Exception Occured while converting Json into Java --> " + e.getMessage());
}
return result;
}
}
编辑:这是调用 JsonToJava 函数的主类。它包括调用我的自定义类事件。由于一些空指针异常,ent1.toString() 错误
import java.time.LocalDateTime;
import java.time.Month;
import java.time.format.DateTimeFormatter;
import bean.Event;
import util.JsonUtil;
public class main {
public static void main(String[] args) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM dd YYYY HH:mm a");
String Test = "Test";
LocalDateTime Time = LocalDateTime.of(2020, Month.DECEMBER, 25, 21, 30);
Event testEvent3 = new Event (Test, false, 0, Time, Test);
System.out.println(testEvent3.toString());
System.out.println();
String JsonTime = JsonUtil.convertJavaToJson(testEvent3);
System.out.println(JsonTime);
System.out.println("----------------------------");
Event ent1 = JsonUtil.convertJsonToJava(JsonTime, Event.class);
System.out.println(ent1.toString());
}
}
解决方案
推荐阅读
- c# - 拆分字符串并获得不同的输出
- cypress - 断言元素消失:等待元素
- amazon-ec2 - 当 eth0 上的实例分配了两个私有 IPS 时,master 上的 k3s 集群 pod 无法访问互联网
- ios - SwiftUI 中的标签栏
- javascript - 反应我想以多个标签而不是一个标签输出数组
- regex - 正则表达式匹配以关键字开头,以关键字或换行符结尾
- raspberry-pi - Raspberry PI GSM HAT 连接到网络问题
- c# - 启动 StreamWriter 时抛出异常
- android - 为什么 Jetpack Compose AppBar 会重叠它的影子
- apache-spark - Yarn 无法提供足够的资源来激发工作