由于 objectMapper.writeValueAsString 的 O/P 格式不正确导致无法识别的字段异常
Unrecognized field exception due to Incorrectly formatted O/P of objectMapper.writeValueAsString
我正在尝试使用 Jackson - ObjectMapper 将我的 hashmap(JSON) 反序列化为 POJO class。下面是散列图:
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 class 使用对象映射器见下文 :
objectMapper.readValue(objectMapper.writeValueAsString(requestMap), MyRequestDTO.class);
我遇到以下错误:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: 无法识别的字段
" "apptDateTime"" (class Collector.MyRequestDTO)
出现上述错误是因为我的 objectMapper.writeValueAsString(requestMap)
的 O/P 是:
{" \"apptDateTime\"":"\"2019-03-19 10:00:00\"","\"meter\"":"\"8682\""
添加哈希图 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\""
。您可以在添加的调试输出中看到这一点:您没有在键或值周围添加引号,但输出无论如何都会显示引号。
您可以通过如下删除换行引号来解决该错误,但最好首先修复 returns 意外数据的功能。
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();
}
我正在尝试使用 Jackson - ObjectMapper 将我的 hashmap(JSON) 反序列化为 POJO class。下面是散列图:
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 class 使用对象映射器见下文 :
objectMapper.readValue(objectMapper.writeValueAsString(requestMap), MyRequestDTO.class);
我遇到以下错误: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: 无法识别的字段 " "apptDateTime"" (class Collector.MyRequestDTO)
出现上述错误是因为我的 objectMapper.writeValueAsString(requestMap)
的 O/P 是:
{" \"apptDateTime\"":"\"2019-03-19 10:00:00\"","\"meter\"":"\"8682\""
添加哈希图 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\""
。您可以在添加的调试输出中看到这一点:您没有在键或值周围添加引号,但输出无论如何都会显示引号。
您可以通过如下删除换行引号来解决该错误,但最好首先修复 returns 意外数据的功能。
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();
}