上下文: 我们正在使用 com.fasterxml.jackson.databind.ObjectMapper 的readValue()方法将 JSON 转换为 Java POJO。当发生JsonParseException或JsonMappingException时,将在日志中打印原始数据摘录(JSON 内容)。
问题: 我们的 JSON 可能包含敏感数据,因此不应记录它以满足安全合规性。
我们正在考虑的选项...
选项 1:使用JsonParseException、JsonMappingException包装 readValue() 方法并添加clearLocation()
仅供参考...... JsonParseException和JsonMappingException上的clearLocation()从异常消息中删除上下文信息
try {
objectMapper.readValue(jsonContent, pojoObject);
} catch (JsonParseException | JsonMappingException e) {
e.clearLocation();
throw e;
}
该解决方案的缺点是,readValue()方法在多个应用程序的很多地方都使用。所以我们需要处理大量的代码更改。我们不应该忘记在未来的实现中调用clearLocation() 。
选项 2:创建自定义 ObjectMapper
public class CustomObjectMapper {
private static ObjectMapper objectMapper = new ObjectMapper();
// showing only one method to simplify
public static <T> T convertJsonToPojo(String content, Class<T> valueType)
throws IOException, JsonParseException, JsonMappingException {
try {
return objectMapper.readValue(content, valueType);
} catch (JsonParseException | JsonMappingException e) {
e.clearLocation();
throw e;
} catch (JsonProcessingException e) {
e.clearLocation();
throw e;
} catch (Exception e) {
throw e;
}
}
}
如果您遇到类似情况并以不同方式处理,请告诉我。