Запретить преобразователь объектов для преобразования строки в число при использовании readTree - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь санировать мой ввод от Map<String,String> до Map<String, Object>, анализируя его с помощью объекта маппера readTree. Однако я столкнулся с проблемой автоматического преобразования значений String в другие типы с помощью сопоставителя объектов.

public void testJson() {
        Map<String, String> data = new HashMap<>();
        data.put("description", "1 2 3");
        data.put("nested", "{\"testKey\":\"1 2 3\"}");
        data.put("amount", "1234E1235");
        System.out.println(SantizeUtil.getSanitizedData(data));
}

Это дает вывод: {amount=Infinity, description=1, nested={"testKey":"1 2 3"}}

Я пробовал различные варианты конфигурациииспользуя MapperFeature и DeserializationConfig, но он все еще не работает. Кто-нибудь может подсказать, как это можно решить? Я хотел бы, чтобы эти значения были обработаны правильно. Я использую jackson-databind 2.8.

public Map<String, Object> getSanitizedData(final Map<String, String> data) {
        final Map<String, Object> formattedData = new HashMap<String, Object>();
        data.entrySet().forEach(entry -> {
            try {
                Object jsonNode = entry.getValue();
                jsonNode = objectMapper().configure().readTree(entry.getValue());
                formattedEmailContext.put(entry.getKey(), jsonNode);
            } catch (final IOException ex) {
                throw new InvalidDataException("Failed to parse data: " + ex.getMessage());
            }
        });
        return formattedEmailContext;
}
...