Я пытаюсь санировать мой ввод от 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;
}