簡體   English   中英

Jackson json xmlgregoriancalendar 解串器

[英]Jackson json xmlgregoriancalendar deserializer

我在解析 json 時遇到問題。它有一個示例日期 - “2014-01-07”。 當它解析並變成 createUserRequest.getBirthday() 時,它包含 - “2014-01-07T04:00:00.000+04:00”。 我在 createUserRequest object 中需要它,然后我將用另一個 object 斷言它。問題是如何獲得“2014-01-07”?

在 CreateUserRequest 中,我有 XMLGregorianCalendar 變量,無法更改它。

受保護的 XMLGregorianCalendar 生日;

下面只是拉出一部分代碼。 忽略 class 和變量名。

public class Test {
    private static final ObjectMapper MAPPER = new ObjectMapper();
    
    public static <T> T parseJson(String pathname, Class<T> objectClass) throws Exception {
        return MAPPER.readValue(new File(pathname), objectClass);
    }

    public void parse() throws Exception {
        CreateUserRequest createUserRequest =
                Test.parseJson("src/test/resources/createUser.json", CreateUserRequest.class);
        System.out.println(createUserRequest.getBirthday());
    }
}

LocalDate

你的問題不清楚。 但是,如果您詢問如何解析文本中表示為"2014-01-07"的僅限日期的值,答案是解析為LocalDate object。

LocalDate ld = LocalDate.parse( "2014-01-07" ) ;

XMLGregorianCalendar class 代表一個時刻,一個在特定時區中看到的具有一天中時間的日期。 對於僅日期值,這是錯誤的 class。 此外,這個 class 現在是遺留的,多年前被現代的java.time類取代。

Jackson 的最新版本支持java.time

轉換

如果通過尚未更新為java.time的代碼將 XMLGregorianCalendar object 傳遞給XMLGregorianCalendar object,請將其從遺留的 class 轉換為現代的java.time類。

查看添加到舊類的新轉換方法。

您需要通過GregorianCalendarXMLGregorianCalendar object 轉換為ZonedDateTime

GregorianCalendar gc = myXmlGregorianCalendar.toGregorianCalendar() ;
ZonedDateTime zdt = gc.toZonedDateTime() ;

ZonedDateTime表示在特定時區中看到的日期和時間。 但是您只對日期部分感興趣。 所以提取一個LocalDate object。

LocalDate ld = zdt.toLocalDate() ;

使用LocalDate#isEqual與您的目標日期進行比較。

LocalDate target = LocalDate.parse( "2014-01-07" ) ;
if( ld.isEqual( target ) ) { … }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM