由于objectMapper.writeValueAsString的O/P格式不正确,导致无法识别的字段异常



我正在尝试使用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));
}
}

我想使用对象映射器将这个requestMap使用到我的POJO类中,如下所示:

objectMapper.readValue(objectMapper.writeValueAsString(requestMap), MyRequestDTO.class);

我得到以下错误:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段""apptDateTime"(类收集器.MyRequestDTO(

出现上述错误是因为我的objectMapper.writeValueAsString(requestMap)的O/p是:

添加哈希映射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"键为"meter"值为"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();
}

相关内容

  • 没有找到相关文章

最新更新