对象映射器 - 线程安全和性能的最佳实践
总结
我想在下面描述的用例上下文中找到使用和/或线程安全和性能方面的最佳实践。ObjectMapper
ObjectReader
背景
我有一个帮助器类(Json.java),其中该方法用于从字符串转换为给定(json可映射)类的对象。toObject()
ObjectMapper
json
问题/疑问
我已经读过,通常建议它是完全线程安全的,但我主要看到它是在非通用上下文中,其中要读取的类是预定义的。在这种情况下,您认为在线程安全性和性能方面的最佳实践是什么?在代码中,我有三个建议,我可以将它们视为一个起点。ObjectReader
我试图通过源代码和文档来查看,但我的理论Java技能不足以从中得出答案。我也看过SO和其他地方的类似问题,但没有找到任何与我的情况足够接近的问题。jackson-databind
import java.io.IOException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
public abstract class Json {
private static final ObjectMapper jsonMapper = new ObjectMapper();
// NOTE: jsonReader is only relevant for Suggestion 3.
private static final ObjectReader jsonReader = jsonMapper.reader();
// Suggestion 1:
public static <T> T toObject1(final Class<T> type, final String json) throws IOException {
return jsonMapper.readValue(json, type);
}
// Suggestion 2:
public static <T> T toObject2(final Class<T> type, final String json) throws IOException {
return jsonMapper.readerFor(type).readValue(json);
}
// Suggestion 3:
public static <T> T toObject3(final Class<T> type, final String json) throws IOException {
return jsonReader.forType(type).readValue(json);
}
// Remainder of class omitted for brevity.
}