java - Jackson ObjectMapper 不遵守配置的日期时间格式
问题描述
我很可能遗漏了一些东西,但是,我无法将对象映射器配置为使用给定的日期时间格式。使用相同的日期格式化程序(用于配置对象映射器)解析日期时间字符串会成功解析相同的日期时间字符串。这是相关代码。
String eventTimeString = "2018-06-13 20:22:00";
String jsonString = "{\"event_time\":\""+eventTimeString+"\"}";
// configure date formatter
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
// configure object mapper
ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(sdf);
// parse json string using configured object mapper
Map<String, Object> jsonDataMap = mapper.readValue(jsonString, new TypeReference<Map<String, Object>>() {});
// print event time class as parsed by object mapper
System.out.println("event time class: " + (jsonDataMap.get("event_time").getClass().getName()));
// test parsing date time field
System.out.println(sdf.parse(eventTimeString));
我得到的输出是:
event time class: java.lang.String
Thu Jun 14 01:52:00 IST 2018
我在这里做错了什么?
谢谢...
解决方案
你错过了一件小事。您应该将类型解析为,Map<String, Date>
而不是Map<String, Object>
如下:
Map<String, Date> jsonDataMap = mapper.readValue(jsonString, new TypeReference<Map<String, Date>>() {});
推荐阅读
- elasticsearch - 如何使用正则表达式在elasticsearch中通过match_phrase查询搜索子对象的值字段
- powershell - MD5-Checksum hashing with powershell for a whole directory
- orm - RepoDb 找不到映射配置
- c# - 数据合同名称未应用于响应
- java - 使用 ConfigurationProperties 加载的嵌套地图的键以其各自的索引为前缀
- c# - 即使对象也总是将 JSON 属性反序列化为 List
- html - 在 ngOnInit() 中执行 POST 请求后如何刷新 HTML 表?
- oracle - 重做日志 Oracle 并提交
- apache-spark - NoSQL 数据库的键值对
- css - 本地字体声明未加载斜体/粗体