我有带插入密钥feaure:的ConcurrentSkipListMap
public static ConcurrentMap<String, GooglePlayGame> games = new ConcurrentSkipListMap<String, GooglePlayGame>(String.CASE_INSENSITIVE_ORDER);
如果我第一次运行我的应用程序,并将添加到地图用户请求中,例如我完成了--games.put("Oddmar",…(--,如果用户在这之后会请求--/game Oddmar(Oddmar或其他什么(--它会起作用,但是。。我总是在静态块的开头从json文件加载我的地图:
static {
TypeFactory typeFactory = mapper.getTypeFactory();
MapType mapType = typeFactory.constructMapType(ConcurrentSkipListMap.class, String.class, GooglePlayGame.class);
try {
games = mapper.readValue(new File(
"gpgames_library.json"), mapType);
} catch (IOException e) {
e.printStackTrace();
}
}
如果"重启"后用户将尝试/game oddmar,它将不会工作-只有/game oddmar。但为什么呢?如果在应用程序中,我总是从我的变量中读取地图(而不是从文件中(。
当您的"TypeFactory"创建映射时,它不使用CASE_INSENSITIVE_ORDER
,而是使用自然顺序。我不知道你的"TypeFactory"是什么,但回避这个问题的一种方法是将JSON读取为临时值,然后使用putAll
将从JSON文件读取的内容添加到games
映射中。
Map<String, GooglePlayGame> temporary = mapper.readValue(new File(
"gpgames_library.json"), mapType);
games.putAll(temporary);