我正在尝试使用Jackson-ObjectMapper将我的hashmap(JSON)反序列化为POJO类。下面是哈希图:
List<Object> setJSONValues = new ArrayList<Object>(Arrays.asList(requestObj));
List<String> setJSONKeys = apiUtility.readJSONKeys(new File("ABC.csv"));
HashMap<String, Object> requestMap = new HashMap<String, Object>();
if (setJSONKeys.size() == setJSONValues.size()) {
for (int i = 0; i < setJSONKeys.size(); i++) {
requestMap.put(setJSONKeys.get(i), setJSONValues.get(i));
}
}
我想使用对象映射器将此请求映射用于我的POJO类,如下所示:
objectMapper.readValue(objectMapper.writeValueAsString(requestMap), MyRequestDTO.class);
我得到以下错误:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段
“” apptDateTime“”(类Collector.MyRequestDTO)
由于我的
objectMapper.writeValueAsString(requestMap)
的O / P为,因此出现上述错误:{“ \” apptDateTime \“”:“ \” 2019-03-19 10:00:00 \“”,“ \”仪表\“”:“ \” 8682 \“”
添加Hashmap O / P:
for (String s:requestMap.keySet())
System.out.println("Key is "+s+"Value is "+requestMap.get(s));
输出:关键是“ apptDateTime”值是“ 2019-03-19 10:00:00”关键是
“表”的值为“ 8682”
最佳答案
您用于读取keys
的实用方法无法按您预期的方式工作(此方法:)
List<String> setJSONKeys = apiUtility.readJSONKeys(new File("ABC.csv"));
它正在返回用双引号引起来的键和值,因此应该是
"apptDateTime"
的键实际上以" \"apptDateTime\""
的形式返回。您可以在添加的调试输出中看到这一点:您不会在键或值周围添加引号,但无论如何输出都会显示引号。您可以通过如下删除包装引号来解决该错误,但是最好修复首先返回意外数据的函数。
String key = removeQuotes(setJSONKeys.get(i));
String value = removeQuotes(setJSONValues.get(i))
requestMap.put(key, setJSONValues.get(i));
...
String removeQuotes(String key) {
key = key.trim();
key = key.substring(1, key.length() - 1); // remove quotes
return key.trim();
}