我正在尝试使用自定义日期格式对非常简单的对象进行序列化和反序列化:
public class DateTimeTest {
private static final String DATE_PATTERN = "yyyyMMdd";
public static DateTime date = DateTime.now();
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JodaModule());
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
ObjectWriter writer = mapper.writer();
String str = writer.writeValueAsString(new Domain());
System.out.println(str);
ObjectReader reader = mapper.reader(Domain.class);
Domain domain = reader.readValue(str);
System.out.println(domain.getDate());
}
private static class Domain {
@JsonFormat(pattern = DATE_PATTERN)
private DateTime date;
public Domain() {
this.date = DateTime.now();
}
public DateTime getDate() {
return date;
}
public void setDate(DateTime date) {
this.date = date;
}
}
}
在执行main方法时,我期望得到类似于以下内容的信息:
“ date”:“ 20151117”
20151117
但不幸的是得到以下信息:
{“ date”:“ 20151117”}
20151117 -01-01T00:00:00.000 + 03:00(年份不正确)
似乎Jackson对于对象反序列化忽略了@JsonFormat批注,并将字符串作为ISO-8601表示法中的日期。有人知道解决办法吗?
<jackson.version>2.5.4</jackson.version>
<jodatime.version>2.8.1</version>
更新:如果我将日期模式更改为“ dd / MM / yyyy”,那么我什至开始出现错误“ IllegalArgumentException:无效格式”。因此,可以肯定的是,杰克逊忽略了反序列化的日期模式。
根据Jackson发行说明,仅从2.6.0版本添加了对Joda @JsonFormat(pattern = ...)反序列化的支持。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句