首页 > 解决方案 > 如何将 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());
    }

}

标签: javajson

解决方案


推荐阅读