我在解析json时遇到了问题。它有一个日期,例如“2014-01-07”。当它解析为createUserRequest.getBirthday()时,它包含“2014-01- 07 T04:00:00.000+04:00”。我需要在createUserRequest对象中使用它,然后我将使用另一个对象Assert它。问题是如何仅获得“2014-01-07”?
在CreateUserRequest中,我有XMLGregorianCalendar变量,无法更改它。
受保护的XMLGregorianCalendar生日;
下面只是抽出部分代码。忽略类名和变量名。
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());
}
}
1条答案
按热度按时间xzlaal3s1#
第一个月
您的问题不清楚,但是如果您要询问如何解析以文本形式表示为
"2014-01-07"
的日期值,答案是解析为LocalDate
对象。XMLGregorianCalendar
类表示一个时刻,一个日期,以及在特定时区中看到的一天中的时间。对于一个只有日期的值,这是一个错误的类。而且,这个类现在是遗留的,几年前被现代的 java.time 类所取代。Jackson的最新版本支持 * java.time *。
转换
如果由尚未更新到 java.time 的代码处理
XMLGregorianCalendar
对象,则将该遗留类转换为现代的 java.time 类。查看添加到旧类中的新转换方法。
您需要通过
GregorianCalendar
将您的XMLGregorianCalendar
对象转换为ZonedDateTime
。一个
ZonedDateTime
表示一个特定时区中的日期和时间,但是你只对日期部分感兴趣,所以提取一个LocalDate
对象。用
LocalDate#isEqual
与您的目标日期进行比较。