[英]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類。
查看添加到舊類的新轉換方法。
您需要通過GregorianCalendar
將XMLGregorianCalendar
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.