Неопознанное исключение поля из-за неправильно отформатированного O / P objectMapper.writeValueAsString - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь десериализовать мою хэш-карту (JSON) в класс POJO, используя Jackson - ObjectMapper. Ниже приведено хеш-изображение:

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.faster xml .jackson.databind.ex c .UnrecognizedPropertyException: нераспознанное поле "" apptDateTime "" (класс Collector.MyRequestDTO)

Вышла ошибка выше, потому что O / P моей objectMapper.writeValueAsString(requestMap) is: {"\" apptDateTime \ "": "\" 2019-03-19 10:00:00 \ "", "\" meter \ "": "\" 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"

1 Ответ

1 голос
/ 09 апреля 2020

Ваш служебный метод для чтения keys не работает так, как вы ожидаете (этот:)

List<String> setJSONKeys = apiUtility.readJSONKeys(new  File("ABC.csv"));

Он возвращает ключи и значения, заключенные в двойные кавычки, поэтому ключ, который должен be "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();
}
...