我正在尝试通过对象映射器的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;
}